WM_PAINT Nachricht

Die WM_PAINT Nachricht wird gesendet, wenn das System oder eine andere Anwendung eine Anforderung zum Zeichnen eines Teils des Fensters einer Anwendung erstellt. Die Nachricht wird gesendet, wenn die Funktion "UpdateWindow " oder " RedrawWindow " aufgerufen wird, oder durch die DispatchMessage-Funktion , wenn die Anwendung eine WM_PAINT Nachricht erhält, indem Sie die Funktion "GetMessage " oder " PeekMessage " verwenden.

Ein Fenster empfängt diese Nachricht über seine WindowProc-Funktion .

LRESULT CALLBACK WindowProc(
  HWND hwnd, 
  UINT  uMsg, 
  WPARAM wParam, 
  LPARAM lParam     
);

Parameter

wParam

Dieser Parameter wird nicht verwendet.

lParam

Dieser Parameter wird nicht verwendet.

Rückgabewert

Eine Anwendung gibt null zurück, wenn diese Nachricht verarbeitet wird.

Beispiel

LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    switch (uMsg)
    {
    case WM_DESTROY:
        PostQuitMessage(0);
        return 0;

    case WM_PAINT:
        {
            PAINTSTRUCT ps;
            HDC hdc = BeginPaint(hwnd, &ps);

            // All painting occurs here, between BeginPaint and EndPaint.
            FillRect(hdc, &ps.rcPaint, (HBRUSH) (COLOR_WINDOW+1));
            EndPaint(hwnd, &ps);
        }
        return 0;
    }

    return DefWindowProc(hwnd, uMsg, wParam, lParam);
}

Beispiel aus Windows klassischen Beispielen auf GitHub.

Hinweise

Die WM_PAINT Nachricht wird vom System generiert und sollte nicht von einer Anwendung gesendet werden. Zum Erzwingen eines Fensters zum Zeichnen in einen bestimmten Gerätekontext verwenden Sie die WM_PRINT oder WM_PRINTCLIENT Nachricht. Beachten Sie, dass dies das Zielfenster erfordert, um die WM_PRINTCLIENT Nachricht zu unterstützen. Die häufigsten Steuerelemente unterstützen die WM_PRINTCLIENT Nachricht.

Die DefWindowProc-Funktion überprüft den Updatebereich. Die Funktion kann auch die WM_NCPAINT Nachricht an die Fensterprozedur senden, wenn der Fensterrahmen gezeichnet und die WM_ERASEBKGND Nachricht gesendet werden muss, wenn der Fensterhintergrund gelöscht werden muss.

Das System sendet diese Nachricht, wenn keine anderen Nachrichten in der Nachrichtenwarteschlange der Anwendung vorhanden sind. DispatchMessage bestimmt, wo die Nachricht gesendet werden soll; GetMessage bestimmt, welche Nachricht verteilt werden soll. GetMessage gibt die WM_PAINT Nachricht zurück, wenn keine anderen Nachrichten in der Nachrichtenwarteschlange der Anwendung vorhanden sind, und DispatchMessage sendet die Nachricht an die entsprechende Fensterprozedur.

Ein Fenster erhält möglicherweise interne Zeichennachrichten aufgrund des Aufrufens von RedrawWindow mit dem RDW_INTERNALPAINT Flag-Satz. In diesem Fall verfügt das Fenster möglicherweise nicht über einen Updatebereich. Eine Anwendung kann die GetUpdateRect-Funktion aufrufen, um zu ermitteln, ob das Fenster über einen Updatebereich verfügt. Wenn GetUpdateRect null zurückgibt, muss die Anwendung die Funktionen BeginPaint und EndPaint nicht aufrufen.

Eine Anwendung muss nach allen erforderlichen internen Gemälden suchen, indem Sie sich ihre internen Datenstrukturen für jede WM_PAINT Nachricht ansehen, da eine WM_PAINT Nachricht möglicherweise durch einen Nicht-NULL-Updatebereich und einen Aufruf an RedrawWindow mit dem RDW_INTERNALPAINT Flag set verursacht wurde.

Das System sendet nur einmal eine interne WM_PAINT Nachricht. Nachdem eine interne WM_PAINTNachricht vonGetMessage oder PeekMessage zurückgegeben wird oder an ein Fenster von UpdateWindow gesendet wird, postet das System keine weiteren WM_PAINT Nachrichten, bis das Fenster ungültig ist oder bis RedrawWindow erneut mit dem RDW_INTERNALPAINT Flag set aufgerufen wird.

Bei einigen allgemeinen Steuerelementen überprüft die Standard-WM_PAINT Nachrichtenverarbeitung den wParam-Parameter . Wenn wParam nicht NULL ist, wird davon ausgegangen, dass der Wert ein HDC ist und diesen Gerätekontext verwendet.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client)
Windows 2000 Professional [nur Desktop-Apps]
Unterstützte Mindestversion (Server)
Windows 2000 Server [nur Desktop-Apps]
Header
Winuser.h (enthalten Windows.h)

Siehe auch

Übersicht über Malerei und Zeichnung

Zeichnen und Zeichnen von Nachrichten

BeginPaint

DefWindowProc

DispatchMessage

EndPaint

GetMessage

GetUpdateRect

PeekMessage

RedrawWindow

UpdateWindow

WM_ERASEBKGND

WM_NCPAINT

WM_PRINT

WM_PRINTCLIENT