다음을 통해 공유


클라이언트 영역 무효화

시스템은 WM_PAINT 메시지의 유일한 소스가 아닙니다. InvalidateRect 또는 InvalidateRgn 함수는 창에 대한 WM_PAINT 메시지를 간접적으로 생성할 수 있습니다. 이러한 함수는 클라이언트 영역의 전체 또는 일부를 잘못된 것으로 표시합니다(다시 그려야 합니다).

다음 예제에서 창 프로시저는 WM_CHAR 메시지를 처리할 때 전체 클라이언트 영역을 무효화합니다. 이렇게 하면 사용자가 숫자를 입력하여 그림을 변경하고 결과를 볼 수 있습니다. 이러한 결과는 애플리케이션의 메시지 큐에 다른 메시지가 없는 즉시 그려집니다.

RECT rc;
POINT 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}; 
POINT *ppt = aptPentagon; 
int cpt = 6; 
 
  . 
  . 
  . 
 
case WM_CHAR: 
    switch (wParam) 
    { 
        case '5': 
            ppt = aptPentagon; 
            cpt = 6; 
            break; 
        case '6': 
            ppt = aptHexagon; 
            cpt = 7; 
            break; 
    } 
    InvalidateRect(hwnd, NULL, TRUE); 
    return 0L; 
 
case WM_PAINT: 
    hdc = BeginPaint(hwnd, &ps); 
    GetClientRect(hwnd, &rc); 
    SetMapMode(hdc, MM_ANISOTROPIC); 
    SetWindowExtEx(hdc, 100, 100, NULL); 
    SetViewportExtEx(hdc, rc.right, rc.bottom, NULL); 
    Polyline(hdc, ppt, cpt); 
    EndPaint(hwnd, &ps); 
    return 0L; 

이 예제에서 InvalidateRect에서 사용하는 NULL 인수는 전체 클라이언트 영역을 지정합니다. TRUE 인수를 사용하면 배경이 지워집니다. 애플리케이션의 메시지 큐에 다른 메시지가 없을 때까지 애플리케이션이 기다리지 않도록 하려면 UpdateWindow 함수를 사용하여 WM_PAINT 메시지를 즉시 보내도록 합니다. 클라이언트 영역에 잘못된 부분이 있는 경우 UpdateWindow 는 지정된 창에 대한 WM_PAINT 메시지를 창 프로시저로 직접 보냅니다.