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

Листинг 20.1

for (int i - 0;i<8;i++) {
MoveToEx(hdc.0.0.NULL): Li neTo(hdc.32*1.250); MoveToEx(hdc.0.0.NULL): Li neTo(hdc.250.32*i);
}

На рис. 20.1 приведен вид формируемого изображения при различных конфигурациях регионов обновления и отсечения. Регион отсечения заштрихован кистью стиля HS_FDI AGONAL (линии параллельны диагонали, соединяющей левый верхний и правый нижний углы окна), регион обновления заштрихован при помощи кисти HS_BDIAG0NAL. В левой части рисунка регион обновления совпадает со всей рабочей областью, а в правой - занимает ее часть. Из рисунка видно, что в обоих случаях лучи рисуются только в общей части регионов обновления и отсечения.

Отсечение по границам регионов

Рис. 20.1. Отсечение по границам регионов В листинге 20.2 приведен полный код этого примера без функции 1пиАрр(), которая создает основное окно.

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

Листинг 20.2

#inclüde <windows.h> int InitApp(HINSTANCE);
int API ENTRY WinMain (HINSTANCE KodPril. HINSTANCE. LPSTR, int) {
MSG msg;
if (InitAppCKodPril)) return 1;
while (GetMessage(&msg. NULL. 0. 0)) DispatchMessage(&msg );
return 0"opengl4_216.html">⇐ Предыдущая| |Следующая ⇒