在更新區域中重新繪製
您可以藉由判斷更新區域的大小和位置,來限制應用程式在處理 WM_PAINT 訊息時所執行的繪圖數量。 由於系統在建立視窗顯示裝置內容的裁剪區域時會使用更新區域,因此您可以檢查裁剪區域來間接判斷更新區域。
在下列範例中,視窗程式會繪製三角形、矩形、五角大樓和六邊形,但前提是每個圖形的所有或部分都位於更新區域內。 視窗程式會使用 RectVisible 函式和 100 到 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乘100矩形內。 在繪製圖形之前,視窗程式會使用 setViewportOrgEx 函式,將檢視區原點設定為工作區的不同部分。 這可防止圖形互相重疊。 變更檢視區原點不會影響裁剪區域,但會影響將矩形傳遞到 RectVisible 的座標如何被解釋。 變更原點也可讓您使用單一矩形來檢查更新區域,而不是每個圖形的個別矩形。