Zeichnen eines benutzerdefinierten Fensterhintergrunds
Sie können Ihren eigenen Fensterhintergrund zeichnen, anstatt ihn vom System zeichnen zu lassen. Die meisten Anwendungen geben beim Registrieren der Fensterklasse einen Pinselgriff oder einen Systemfarbwert für den Klassenhintergrundpinsel an. das System verwendet den Pinsel oder die Farbe, um den Hintergrund zu zeichnen. Wenn Sie den Klassenhintergrundpinsel jedoch auf NULL festlegen, sendet das System eine WM_ERASEBKGND Nachricht an Ihre Fensterprozedur, wenn der Fensterhintergrund gezeichnet werden muss, sodass Sie einen benutzerdefinierten Hintergrund zeichnen können.
Im folgenden Beispiel zeichnet die Fensterprozedur ein großes Schachbrettmuster, das ordnungsgemäß in das Fenster passt. Die Prozedur füllt den Clientbereich mit einem weißen Pinsel aus und zeichnet dann mit einem grauen Pinsel dreizehn 20 mal 20 Rechtecke. Der Anzeigegerätekontext, der beim Zeichnen des Hintergrunds verwendet werden soll, wird im wParam-Parameter für die Nachricht angegeben.
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;
Wenn die Anwendung ein eigenes minimiertes Fenster zeichnet, sendet das System auch die WM_ERASEBKGND Nachricht an die Fensterprozedur, um den Hintergrund für das minimierte Fenster zu zeichnen. Sie können dieselbe Technik verwenden, die von WM_PAINT verwendet wird, um zu bestimmen, ob das Fenster minimiert ist. Rufen Sie die IsIconic-Funktion auf, und überprüfen Sie den Rückgabewert TRUE.