Desenhando um plano de fundo de janela personalizado
Você pode desenhar seu próprio plano de fundo de janela em vez de fazer com que o sistema o desenhe para você. A maioria dos aplicativos especifica um identificador de pincel ou valor de cor do sistema para o pincel de plano de fundo da classe ao registrar a classe de janela; o sistema usa o pincel ou a cor para desenhar a tela de fundo. No entanto, se você definir o pincel de plano de fundo da classe como NULL, o sistema enviará uma mensagem WM_ERASEBKGND para o procedimento de janela sempre que a tela de fundo da janela precisar ser desenhada, permitindo que você desenhe uma tela de fundo personalizada.
No exemplo a seguir, o procedimento de janela desenha um padrão de quadro de verificação grande que se encaixa perfeitamente na janela. O procedimento preenche a área do cliente com um pincel branco e desenha treze retângulos 20 por 20 usando um pincel cinza. O contexto do dispositivo de exibição a ser usado ao desenhar a tela de fundo é especificado no parâmetro wParam da mensagem.
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 o aplicativo desenhar sua própria janela minimizada, o sistema também enviará a mensagem WM_ERASEBKGND para o procedimento de janela para desenhar a tela de fundo da janela minimizada. Você pode usar a mesma técnica usada por WM_PAINT para determinar se a janela é minimizada, ou seja, chamar a função IsIconic e marcar para o valor retornado TRUE.