共用方式為


使客戶區失效

系統不是 WM_PAINT 訊息的唯一來源。 InvalidateRectInvalidateRgn 函式可以間接為您的視窗產生 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 訊息直接傳送至視窗程序。