//FrameRgn(hdc.hUpd.hbrUpd.4.8);
//Эта функция закрасит только контур региона.
if(hClp) FillRgnC hdc. hClp. hbrClp); //Регион отсечения - красная штриховка
ReleaseDC(hWnd.hdc); //Освобождение и уничтожение всех объектов.
if(hUpd) DeleteObject(hUpd):
if(hClp) DeleteObject(hClp):
DeleteObject(hbrUpd);
Del eteObjecU hbrClp);
DeleteObject(hpen);
return 0;
}
return DefWindowProc(hWnd.message.wParam.lParam); }
Заметим, что функции GetUpdateRgn( ) и GetCl i pRgn( ) получают копии регионов обновления и отсечения, а не доступ к самим этим системным объектам. Если в рассмотренном примере убрать комментарии перед операциями переноса регионов, то будет видно, что изображения регионов сдвинутся, но это не повлияет на отсечение рисунка. Регион отсечения, хранящийся в контексте, тоже можно переместить, но для этого надо использовать функцию Of f setCl i pRgn( ). При организации отсечения и проверки точек на принадлежность регионам следует также учитывать, что точки, лежащие на правой и нижней границах создаваемого региона, не входят в регион. То есть если выбрать в качестве области отсечения регион, созданный функцией CreateRectRgn(0.0.100.50), то точки (100,у) и (х.50) рисоваться не будут, а при проверке их видимости функция PtInVisible( ) укажет, что они невидимы.
Самостоятельно измените рассмотренную программу для демонстрации роли метарегиона в процессе формирования изображения в окне. Метарегион заполняется при помощи функции SetMetaRgn(hdc), которая копирует хранящийся в контексте регион отсечения в метарегион, после чего удаляет регион отсечения. Получить метарегион можно при помощи функции GetMetaRgn( ).
Работа с окнами произвольной формы
В настоящее время появляется все больше программ, использующих вместо стандартных окон Windows окна и органы управления произвольной формы. Например, при воспроизведении звука выводится фотореалистичное изображение аудиоплеера с размещенными на его передней панели органами индикации и управления. Для этого используется обычное окно hWnd, область видимости которого ограничивается регионом hRgn, указанным в вызове функции SetWi ndowRgn().