Een aangepaste vensterachtergrond tekenen
U kunt uw eigen vensterachtergrond tekenen in plaats van het systeem voor u te laten tekenen. De meeste toepassingen geven een kwastgreep of systeemkleurwaarde op voor de klasachtergrondborstel bij het registreren van de vensterklasse; het systeem gebruikt de borstel of kleur om de achtergrond te tekenen. Als u het achtergrondpenseel van de klasse instelt op NULL-, stuurt het systeem echter een WM_ERASEBKGND bericht naar uw vensterprocedure wanneer de achtergrond van het venster moet worden getekend, waardoor u een aangepaste achtergrond kunt tekenen.
In het volgende voorbeeld tekent de vensterprocedure een groot vinkbordpatroon dat netjes in het venster past. De procedure vult het clientgebied met een witte borstel en tekent vervolgens dertien rechthoeken van 20 bij 20 met een grijze borstel. De weergaveapparaatcontext die moet worden gebruikt bij het tekenen van de achtergrond, wordt opgegeven in de parameter wParam voor het bericht.
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;
Als de toepassing een eigen geminimaliseerd venster tekent, stuurt het systeem ook het WM_ERASEBKGND bericht naar de vensterprocedure om de achtergrond voor het geminimaliseerde venster te tekenen. U kunt dezelfde techniek gebruiken die door WM_PAINT wordt gebruikt om te bepalen of het venster is geminimaliseerd, de functie IsIconic- aanroepen en controleren op de retourwaarde TRUE.