Compartir a través de


Dibujo de un fondo de ventana personalizado

Puede dibujar su propio fondo de ventana en lugar de hacer que el sistema lo dibuje por usted. La mayoría de las aplicaciones especifican un identificador de pincel o un valor de color del sistema para el pincel de fondo de clase al registrar la clase de ventana; el sistema usa el pincel o el color para dibujar el fondo. Sin embargo, si establece el pincel de fondo de clase en NULL, el sistema envía un mensaje de WM_ERASEBKGND al procedimiento de ventana siempre que se deba dibujar el fondo de la ventana, lo que le permite dibujar un fondo personalizado.

En el ejemplo siguiente, el procedimiento de ventana dibuja un patrón de tablero de verificación grande que se ajusta perfectamente a la ventana. El procedimiento rellena el área cliente con un pincel blanco y, a continuación, dibuja trece rectángulos de 20 a 20 mediante un pincel gris. Contexto del dispositivo de visualización que se va a usar al dibujar el fondo se especifica en el parámetro wParam para el mensaje.

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; 

Si la aplicación dibuja su propia ventana minimizada, el sistema también envía el mensaje WM_ERASEBKGND al procedimiento de ventana para dibujar el fondo de la ventana minimizada. Puede usar la misma técnica que usa WM_PAINT para determinar si la ventana está minimizada, llamar a la función IsIconic y comprobar el valor devuelto TRUE.