다음을 통해 공유


업데이트 지역에서 다시 그리기

업데이트 영역의 크기와 위치를 결정하여 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 에 전달된 사각형의 좌표가 해석되는 방식에 영향을 줍니다. 원본을 변경하면 단일 사각형을 사용하여 각 그림에 대한 개별 사각형이 아닌 업데이트 영역을 검사 수 있습니다.