Область ограничения не задана hrgnClip
// Область ограничения не задана hrgnClip = NULL;
return 0; }
// При изменении размеров окна сохраняем // новые значения для ширины и высоты, // а также определяем область ограничения case WM_SIZE: { cxClient = LOWORD(lParam); cyClient = HIWORD(lParam);
// Если область ограничения была определена раньше, // удаляем ее if(hrgnClip) DeleteRgn(hrgnClip);
// Формируем область ограничения hrgnClip = CreateEllipticRgn(0, 0, cxClient, cyClient);
// Временная область ограничения hrgnTemp = CreateEllipticRgn(0, 0, cxClient, cyClient);
// Первая эллиптическая область hrgn1 = CreateEllipticRgn(0, 0, cxClient, cyClient);
// Вторая эллиптическая область hrgn2 = CreateEllipticRgn(cxClient/3, cyClient/3, 2*(cxClient/3), 2*(cyClient/3));
// Прямоугольная область hrgn3 = CreateRectRgn(cxClient/20, cyClient/20, 19*(cxClient/20), 19*(cyClient/20));
// Комбинируем области UnionRgn(hrgnTemp, hrgn1, hrgn3); SubtractRgn(hrgnClip, hrgnTemp, hrgn2);
// Удаляем временные области DeleteRgn(hrgn1); DeleteRgn(hrgn2); DeleteRgn(hrgn3); DeleteRgn(hrgnTemp); return 0; }
// Рисование в окне case WM_PAINT: { RECT rc;
// Получаем контекст отображения для // рисования во внутренней области окна hdc = BeginPaint(hwnd, &ps);
// Выбираем встроенную кисть зеленого цвета hbrush = CreateSolidBrush(RGB(0, 0xff, 0));
// Обводим границы области FrameRgn(hdc, hrgnClip, hbrush, 2, 5);
// Выбираем область ограничения в контекст // отображения SelectClipRgn(hdc, hrgnClip);
// Определяем координаты прямоугольной // области для вывода текста rc.left = cxChar; rc.top = 0; rc.right = cxClient - cxChar; rc.bottom = cyClient;
// Вывод текста DrawText(hdc, szText, lstrlen(szText), &rc, DT_LEFT | DT_WORDBREAK);
// Освобождаем контекст отображения EndPaint(hwnd, &ps); return 0; }
case WM_DESTROY: { // удаляем область ограничения DeleteRgn(hrgnClip);
PostQuitMessage(0); return 0; }
default: break; } return DefWindowProc(hwnd, msg, wParam, lParam); }
Во время создания окна обработчик сообщения WM_CREATE определяет метрику шрифта и записывает значение NULL в переменную hrgnClip.
Содержание Назад Вперед