Partilhar via


Desenhando um plano de fundo de janela personalizado

Você pode desenhar seu próprio plano de fundo da janela em vez de fazer com que o sistema desenhe para você. A maioria dos aplicativos especifica uma alça de pincel ou um valor de cor do sistema para o pincel de fundo da classe ao registrar a classe de janela; O sistema usa o pincel ou a cor para desenhar o plano de fundo. Caso defina o pincel de plano de fundo da classe como NULL, o sistema, no entanto, enviará uma mensagem WM_ERASEBKGND para o procedimento da janela sempre que for necessário desenhar o plano de fundo da janela, permitindo que desenhe um plano de fundo personalizado.

No exemplo a seguir, o procedimento de janela desenha um grande padrão quadriculado que se encaixa perfeitamente na janela. O procedimento preenche a área do cliente com um pincel branco e, em seguida, desenha treze retângulos 20 por 20 usando um pincel cinza. O contexto do dispositivo de exibição a ser usado ao desenhar o plano de fundo é especificado no parâmetro wParam para a 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 desenha sua própria janela minimizada, o sistema também envia a mensagem WM_ERASEBKGND para o procedimento de janela para desenhar o plano de fundo para a 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 verificar o valor de retorno TRUE.