Windows API Урок 17. Создаем и закрашиваем регион
Регионы позволяют нам работать с непрямоугольными областями. Использование регионов может быть самое разное - от создания непрямоугольных окон до определения, попали мы мышкой в некоторую непрямоугольную область (которая и будет задаваться регионом). На этом уроке мы посмотрим, как с помощью региона создать область неправильной формы и закрасить ее.
Вот код для рисования области, ограниченной некоторой ломанной:
LONG WINAPI WndProc(HWND hwnd, UINT Message, WPARAM wparam, LPARAM lparam)
{
...
// Создаем и заполняем массив точек.
POINT pt[3] = {{10, 10}, {100, 10}, {20, 120}};
...
switch (Message){
case WM_PAINT:
hdc = BeginPaint(hwnd, &ps);
// Объявляем и создаем рагион на основе массива точек.
HRGN rg;
rg = CreatePolygonRgn(pt, 3, WINDING);
// Заполяем регион желтым цветом.
FillRgn(hdc, rg, CreateSolidBrush(RGB(255, 255, 0)));
EndPaint(hwnd, &ps);
break;
...
Результатом выполнения программы будет желтый треугольник:
Схема создания региона такая - сначала создаем массив точек. Это будут вершины нашего региона. Потом путем вызова API-функции CreatePolygonRgn создаем на основе этого массива точек регион. Параметры у этой API-функции такие: первый - адрес массива точек (мы передаем имя массива, но это как раз и есть адрес), второй параметр - сколько всего у нашего региона вершин (три в нашем случае) и, наконец, третий параметр задает способ раскраски региона. Для треугольника в нашем случае это все равно. Если же количество вершин больше или равно пяти и наша ломаная имеет самопересечения, то разные значения для третьего параметра будут давать разные эффекты. Например, при задании следующего массива точек:
POINT pt[5] = {{10, 30}, {100, 30}, {20, 120}, {50, 0}, {100, 100}};
и при значении для третьего параметра WINDING:
rg = CreatePolygonRgn(pt, 5, WINDING);
мы получим закрашенную внутри звезду:
А если третий параметр мы установим в ALTERNATE:
rg = CreatePolygonRgn(pt, 5, ALTERNATE);
то получим звезду с частично незакрашенной внутренней областью:
|