BeginPaint(hWnd.Sps); //Этот оператор пошлет сообщение WM_ERASEBKGND //и очистит окно, после чего удалит дефектную область EndPaint(hWnd.&ps); //Оператор освобождает созданный в ps контекст InvalidateRect(hWnd.&Rl.TRUE); //Формируется регион обновления ValidateRect(hWnd.&R): //и посылается WM_PAINT. break;

case WM_PAINT: //Демонстрация отсечения лучей. {

Res - GetUpdateRgn(hWnd.hUpd.TRUE); //В регион hUpd копируется связанная

HRGN - CreateRectRgn(0.0.20.20); //с окном область обновления

//При щелчке правой кнопкой она совпадает с рабочей областью.

HDC hdc - BeginPaint(hWnd.Äps);

//Дефектная область занесена в контекст hdc.

//Если GetUpdateRgnO вызвать здесь - получим пустой регион.

HRGN hClp - CreateRectRgn(0.0.85.85); //Создали регион С1р и занесли

SelectClipRgn(hdc.hClp); // в hdc как регион отсечения. Если оператор

//SelectClipRgnO закомментировать, то следующий оператор прочитает

//регион отсечения из контекста, который совпадет с hUpd

Res - GetClipRgn(hdc.hClp);
if(Res-ERROR) {DeleteObject(hClp):hClp - NULL;}

//Если в Res не NULLREGION, а код ошибки ERROR, то регион отсутствует

//и не влияет на отсечение.

//OffsetRgn(hClр.30.30); Если убрать этот комментарий, то будет видно, //что перенос региона hClp после считывания его формы в контекст не //влияет на выполнение отсечения.

HPEN hpen - CreatePen(PS__S0LID.2.0); //Лучи рисуются, но HPEN oldPen - (HPEN)SelectObject(hdc.hpen); //видны только участки, //попадающие в пересечение регионов hUpd и hClp for ( int i - 0; i<8;i++) {

MoveToEx(hdc.0.0.NULL); LineTo(hdc.32*1.250);

Работа с окнами произвольной формы

MoveToEx(hdc.0.0.NULL); LineTo(hdc.250.32*1 ); }
SelectObject(hdc.oldPen); EndPaint(hWnd.&ps);

//Штрихуем регионы. Чтобы изображения регионов не отсекались, hdc - GetDC(hWnd); //запрашиваем контекст без дефектной области. HBRUSH hbrUpd - CreateHatchBrush(HS_BDIAGONAL.RGB(0.0.255)); HBRUSH hbrClp - CreateHatchBrush(HS_FDIAGONAL.RGB(255.0.0)); SetBkModeC hdc.TRANSPARENT);

FillRgn( hdc. hUpd. hbrUpd); //Регион обновления - синяя штриховка.


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