Udostępnij za pośrednictwem


Rysowanie niestandardowego tła okna

Możesz narysować własne tło okna, zamiast rysować go przez system. Większość aplikacji określa uchwyt pędzla lub wartość koloru systemowego dla pędzla tła klasy okna podczas rejestrowania klasy; system używa pędzla lub koloru do rysowania tła. Jeśli ustawisz pędzel tła klasy na wartość NULL, system jednak wysyła komunikat WM_ERASEBKGND do procedury okna za każdym razem, gdy tło okna musi być narysowane, umożliwiając rysowanie niestandardowego tła.

W poniższym przykładzie procedura okna rysuje duży wzór szachownicy, który idealnie pasuje do okna. Procedura wypełnia obszar kliencki białym pędzlem, a następnie za pomocą szarego pędzla rysuje trzynaście prostokątów o wymiarach 20 na 20. Kontekst urządzenia wyświetlającego, który jest używany podczas rysowania tła, jest określony w parametrze wParam dla komunikatu.

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; 

Jeśli aplikacja rysuje własne okno zminimalizowane, system wysyła również komunikat WM_ERASEBKGND do procedury obsługi okna, aby narysować tło dla okna zminimalizowanego. Możesz użyć tej samej techniki używanej przez WM_PAINT, aby określić, czy okno jest zminimalizowane, czyli wywołać funkcję IsIconic i sprawdzić wartość zwracaną TRUE.