Операционная система Microsoft Windows 3.1 для программиста. Дополнительные главы


Листинг 4.7. Файл hlpmore/hlpmore.cpp - часть 3


EndPaint(hwnd, &ps); return 0; }

// Обработчик этого сообщения должен определить // размеры встроенного окна case EWM_QUERYSIZE: { // Определяем метрики фиксированного шрифта hdc = GetDC(hwnd); SelectObject(hdc, GetStockObject(SYSTEM_FIXED_FONT)); GetTextMetrics(hdc, &tm); cxChar = tm.tmMaxCharWidth; cyChar = tm.tmHeight + tm.tmExternalLeading; ReleaseDC(hwnd, hdc);

// Сохраняем размеры встроенного окна ((LPPOINT)lParam)->x = 10 * cxChar; ((LPPOINT)lParam)->y = 2 * cyChar;

return 1; }

// В ответ на это сообщение функция встроенного окна // должна вернуть представление содержимого окна // в виде текста или битового изображения case EWM_RENDER: { long lPtr = 0l;

switch(wParam) { // Представление содержимого в виде текста case CF_TEXT: { // Заказываем глобальный блок памяти HGLOBAL hglb = GlobalAlloc(GMEM_MOVEABLE, 50); if(hglb) { // Фиксируем блок памяти LPSTR lpszTempBuf = (LPSTR)GlobalLock(hglb);

// Копируем строку, содержащую текущее время lstrcpy(lpszTempBuf,"\r\n"); lstrcat(lpszTempBuf,szBuf); lstrcat(lpszTempBuf,"\r\n");

// Расфиксируем блок памяти GlobalUnlock(hglb);

// Возвращаем идентификатор блока памяти, // содержащего текстовое представление lPtr = (long)hglb; } break; }

// Представление содержимого // в виде битового изображения case CF_BITMAP: { POINT pt; RECT rc; HBITMAP hbmp, hbmpOld; HBRUSH hbrush;

// Сохраняем указатель на структуру RENDERINFO qri = (QRI)lParam;

// Создаем контекст отображения, совместимый // с экраном монитора hdc = CreateCompatibleDC(NULL);

// Определяем размеры встроенного окна SendMessage(hwnd, EWM_QUERYSIZE, (WPARAM)hdc, (long)(LPPOINT)&pt);

// Создаем битовое изображение, имеющее размеры, // равные размерам встроенного окна rc.left = rc.top = 0; rc.right = pt.x; rc.bottom = pt.y; hbmp = CreateCompatibleBitmap(qri->hdc, pt.x, pt.y);

// Выбираем битовое изображение // в контекст отображения hbmpOld = (HBITMAP)SelectObject(hdc,hbmp);

// Закрашиваем битовое изображение цветом фона hbrush = CreateSolidBrush(GetBkColor(hdc)); FillRect(hdc, &rc, hbrush); DeleteObject(hbrush);




Начало  Назад  Вперед



Книжный магазин