Кроме этого в контексте могут присутствовать (см. [4]) еще две области, которые называются метарегионом и регионом отсечения. Они введены для того, чтобы на процесс отсечения влияла не только операционная система, но и приложение. При получении оконной функцией сообщения WM_PAINT эти регионы еще не созданы и не участвуют в отсечении. Но после получения контекста область отсечения, заданную системным регионом, можно еще сузить путем формирования и занесения в полученный контекст метарегиона или региона отсечения. Например, в следующем фрагменте кода показано, как оконная процедура получила контекст, создала регион hClp и занесла его в контекст как регион отсечения:

HDC hdc - BeginPaint(hWnd.&ps):
HRGN hClp - CreateRectRgn(0.0.85.85);
int Res - SelectClipRgn(hdc.hClp):

Несмотря на название, изображение будет отсекаться не по границам региона отсечения hCl р, а по его части, общей с системным регионом.

Форму региона отсечения можно получить при помощи функции Get CI ipRgn (hdc.hClp).

Обычно возвращаемая рассмотренными функциями переменная Res содержит код ошибки ERROR, равный нулю, или константы, характеризующие полученный регион. Константа NULLREGION указывает, что создан пустой регион с нулевой площадью. Значение SIMPLEREGION сигнализирует о создании прямоугольного региона, а константа C0MPLEXREGI0N указывает, что был создан непрямоугольный регион.

Функция GetClipRgn(hdc, hClp) возвратит код ошибки (а не NULLREGION), если после запроса контекста в него не заносился регион отсечения. Но это верно не для всех функций. Так, функция SetRectRgn () может возвращать нулевое значеТипы регионов ние в качестве признака ошибки или любое другое значение, сигнализирующее о том, что работа функции завершилась штатно.

Регионы предназначены не для того, чтобы их рисовать на экране, но если необходимо, например, показать на объектах места, чувствительные к щелчкам мыши, можно воспользоваться одной из функций закраски регионов. Функция PaintRgn(HDC hdc. HRGN hrgn) закрашивает регион кистью, выбранной в контексте отображения. Функция FillRgn(HDC hdc. HRGN hrgn. HBRUSH hbr) использует для заливки региона кисть, идентификатор которой передается функции в качестве параметра hbr. Функция FrameRgn(HDC hdc.HRGN hrgn.HBRUSH hbr.int Width.int Height) дополнительно получает высоту и ширину прямоугольника «кисть» и обводит этим прямоугольником контур региона. И наконец, функция InvertRgn(HDC hdc. HRGN hrgn) инвертирует цвета в указанном регионе.


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