Condividi tramite


Disegno di uno sfondo di una finestra personalizzata

È possibile disegnare lo sfondo della finestra da soli anziché farlo disegnare al sistema. La maggior parte delle applicazioni specifica un gestore di pennello o un valore di colore di sistema per il pennello di sfondo della classe durante la registrazione della classe di finestra; il sistema utilizza 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 WM_ERASEBKGND alla routine della finestra ogni volta che lo sfondo della finestra deve essere disegnato, consentendo di disegnare uno sfondo personalizzato.

Nell'esempio seguente, la procedura della finestra disegna un motivo a scacchiera di grandi dimensioni che si adatta perfettamente alla finestra. La procedura riempie l'area client con un pennello bianco e quindi disegna tredici rettangoli 20 per 20 usando un pennello grigio. Il contesto del dispositivo di visualizzazione da utilizzare per disegnare lo sfondo è specificato nel parametro wParam del 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, ovvero chiamare la funzione IsIconic e verificare il valore restituito TRUE.