繪製自訂視窗背景
您可以繪製自己的視窗背景,而不是讓系統為您繪製它。 大部分的應用程式在註冊視窗類別時,指定類別背景筆刷的筆刷控點或系統色彩值;系統會使用筆刷或色彩繪製背景。 不過,如果您將類別背景筆刷設定為 Null,則每當必須繪製視窗背景時,系統就會將 WM_ERASEBKGND 訊息傳送至視窗程式,讓您繪製自訂背景。
在下列範例中,視窗程式會繪製一個大型的棋盤模式,以整齊方式放入視窗中。 此程式會以白色筆刷填滿工作區,然後使用灰色筆刷繪製十三個 20 到 20 個矩形。 在訊息的 wParam 參數中指定繪製背景時要使用的顯示裝置內容。
HBRUSH hbrWhite, hbrGray;
.
.
.
case WM_CREATE:
hbrWhite = GetStockObject(WHITE_BRUSH);
hbrGray = GetStockObject(GRAY_BRUSH);
return 0L;
case WM_ERASEBKGND:
hdc = (HDC) wParam;
GetClientRect(hwnd, &rc);
SetMapMode(hdc, MM_ANISOTROPIC);
SetWindowExtEx(hdc, 100, 100, NULL);
SetViewportExtEx(hdc, rc.right, rc.bottom, NULL);
FillRect(hdc, &rc, hbrWhite);
for (i = 0; i < 13; i++)
{
x = (i * 40) % 100;
y = ((i * 40) / 100) * 20;
SetRect(&rc, x, y, x + 20, y + 20);
FillRect(hdc, &rc, hbrGray);
}
return 1L;
如果應用程式繪製自己的最小化視窗,系統也會將 WM_ERASEBKGND 訊息傳送至視窗程式,以繪製最小化視窗的背景。 您可以使用 WM_PAINT 所使用的相同技術來判斷視窗是否最小化,呼叫 IsIconic 函式並檢查傳回值 TRUE。