업데이트 지역에서 다시 그리기
업데이트 영역의 크기와 위치를 결정하여 WM_PAINT 메시지를 처리할 때 애플리케이션이 수행하는 그리기 양을 제한할 수 있습니다. 시스템에서는 창의 표시 디바이스 컨텍스트에 대한 클리핑 영역을 만들 때 업데이트 영역을 사용하므로 클리핑 영역을 검사하여 업데이트 영역을 간접적으로 확인할 수 있습니다.
다음 예제에서 창 프로시저는 삼각형, 사각형, 펜타곤 및 육각형을 그리지만 각 그림의 전체 또는 일부가 업데이트 영역 내에 있는 경우에만 해당합니다. 창 프로시저는 RectVisible 함수와 100 x 100 사각형을 사용하여 BeginPaint에서 검색한 일반적인 디바이스 컨텍스트에 대한 그림이 클리핑 영역(따라서 업데이트 지역) 내에 있는지 여부를 확인합니다.
POINT aptTriangle[4] = {50,2, 98,86, 2,86, 50,2},
aptRectangle[5] = { 2,2, 98,2, 98,98, 2,98, 2,2},
aptPentagon[6] = {50,2, 98,35, 79,90, 21,90, 2,35, 50,2},
aptHexagon[7] = {50,2, 93,25, 93,75, 50,98, 7,75, 7,25, 50,2};
.
.
.
case WM_PAINT:
hdc = BeginPaint(hwnd, &ps);
SetRect(&rc, 0, 0, 100, 100);
if (RectVisible(hdc, &rc))
Polyline(hdc, aptTriangle, 4);
SetViewportOrgEx(hdc, 100, 0, NULL);
if (RectVisible(hdc, &rc))
Polyline(hdc, aptRectangle, 5);
SetViewportOrgEx(hdc, 0, 100, NULL);
if (RectVisible(hdc, &rc))
Polyline(hdc, aptPentagon, 6);
SetViewportOrgEx(hdc, 100, 100, NULL);
if (RectVisible(hdc, &rc))
Polyline(hdc, aptHexagon, 7);
EndPaint(hwnd, &ps);
return 0L;
.
.
.
이 예제에서 각 그림의 좌표는 동일한 100 x 100 사각형 내에 있습니다. 그림을 그리기 전에 창 프로시저는 SetViewportOrgEx 함수를 사용하여 뷰포트 원본을 클라이언트 영역의 다른 부분으로 설정합니다. 이렇게 하면 그림이 다른 그림 위에 그려지지 않습니다. 뷰포트 원점 변경은 클리핑 영역에 영향을 주지 않지만 RectVisible 에 전달된 사각형의 좌표가 해석되는 방식에 영향을 줍니다. 원본을 변경하면 단일 사각형을 사용하여 각 그림에 대한 개별 사각형이 아닌 업데이트 영역을 검사 수 있습니다.