Disegno di uno sfondo di una finestra personalizzata
È possibile disegnare il proprio sfondo della finestra invece di disegnare il sistema per voi. La maggior parte delle applicazioni specifica un handle pennello o un valore di colore di sistema per il pennello di sfondo della classe durante la registrazione della classe finestra; il sistema usa il pennello o il colore per disegnare lo sfondo. Se si imposta il pennello di sfondo della classe su NULL, tuttavia, il sistema invia un messaggio di WM_ERASEBKGND alla routine della finestra ogni volta che è necessario disegnare lo sfondo della finestra, consentendo di disegnare uno sfondo personalizzato.
Nell'esempio seguente, la routine della finestra disegna un motivo checkerboard di grandi dimensioni che si adatta perfettamente alla finestra. La procedura riempie l'area client con un pennello bianco e quindi disegna tredici rettangoli da 20 a 20 usando un pennello grigio. Contesto del dispositivo di visualizzazione da utilizzare quando si disegna lo sfondo viene specificato nel parametro wParam per il messaggio.
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;
Se l'applicazione disegna una finestra ridotta a icona, il sistema invia anche il messaggio WM_ERASEBKGND alla routine della finestra per disegnare lo sfondo per la finestra ridotta a icona. È possibile usare la stessa tecnica usata da WM_PAINT per determinare se la finestra è ridotta a icona, chiamare la funzione IsIconic e verificare la presenza del valore restituito TRUE.