使工作區失效
系統不是 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 訊息直接傳送至視窗程式。