Прямоугольные регионы создаются функциями CreateRectRgrU) и CreateRectRgnlndi rect( ). Функции CreateRectRgrU) передаются целочисленные координаты углов прямоугольника в системе рабочей области окна:

HRGN hRgn - CreateRectRgnCxLeft. yTop.xRight. yBottom)

Функции CreateRectRgnlndirectO передается адрес структуры типа RECT. Например, следующий вызов функции создаст регион на основе данных, полученных в переменной, объявленной как RECT R:

HRGN hRgnl - CreateRectRgnlndirect(&R):

Если регион не будет создан, то дескриптор региона получит значение NULL.

Этим функциям не передается контекст устройства, потому что регионы являются объектами ядра ОС, а не библиотеки GDI. Для экономии системных ресурсов регионы, которые больше не будут использоваться, следует уничтожать, используя уже рассмотренную ранее функцию DeleteObject:

BOOL Res - DeleteObject((hRgn):

Создание и применение регионов

Если регион hRgn успешно уничтожен, то функция возвращает ненулевое значение. Можно также пользоваться макрокомандой DeleteRgnO, определенной в файле windowsx.h следующим образом:

#define DeleteRgn(hrgn) DeleteObject((HGDIOBJ)(HRGN)(hrgn))

Если регион уже создан, можно изменять его координаты. Для этого может применяться функция переноса региона Offset (hRgn. offsetX. offsetY) и функция изменения координат прямоугольного региона SetRectRgn(hRgn, xLeft. уТор. xRight. yBottom).

Для этого требуется меньше процессорного времени, чем для уничтожения существующего и создания нового региона. Возможно, именно поэтому функции, позволяющие получить регионы, связанные с окном или контекстом, также требуют передачи им дескрипторов уже существующих регионов.

Например, при помощи функции GetUpdateRgn() можно получить конфигурацию дефектной области окна hWnd, то есть региона обновления. Но для этого надо предварительно создать любой другой регион, размеры которого не имеют значения, как показано в следующем фрагменте кода:

HRGN hUpd - CreateRectRgn(0.0.20.20): int Res - GetUpdateRgn(hWnd.hUpd.FALSE):

В первой части книги отмечалось, что с окном связано одновременно несколько областей, некоторые из которых используются операционной системой для объединения в системный регион. Форма системного региона заносится в контекст функцией BeginPaint() и используется для отсечения примитивов.


⇐ Предыдущая| |Следующая ⇒