Freigeben über


WM_PAINT Nachricht

Die WM_PAINT Meldung wird gesendet, wenn das System oder eine andere Anwendung eine Anforderung zum Zeichnen eines Teils des Fensters einer Anwendung sendet. Die Nachricht wird gesendet, wenn die Funktion UpdateWindow oder RedrawWindow aufgerufen wird, oder von der DispatchMessage-Funktion, wenn die Anwendung mithilfe der GetMessage- oder PeekMessage-Funktion eine WM_PAINT Nachricht abruft.

Ein Fenster empfängt diese Meldung ü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 sie diese Nachricht verarbeitet.

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 Klassische Windows-Beispiele auf GitHub.

Bemerkungen

Die WM_PAINT Nachricht wird vom System generiert und sollte nicht von einer Anwendung gesendet werden. Um das Zeichnen eines Fensters in einen bestimmten Gerätekontext zu erzwingen, verwenden Sie die WM_PRINT oderWM_PRINTCLIENT Meldung. Beachten Sie, dass dafür das Zielfenster die WM_PRINTCLIENT-Nachricht unterstützt. Die meisten gängigen Steuerelemente unterstützen die WM_PRINTCLIENT Meldung.

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

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

Ein Fenster empfängt möglicherweise interne Paint-Nachrichten als Ergebnis des Aufrufs von RedrawWindow mit festgelegtem RDW_INTERNALPAINT Flag. In diesem Fall verfügt das Fenster möglicherweise nicht über einen Updatebereich. Eine Anwendung kann die GetUpdateRect-Funktion aufrufen, um zu bestimmen, 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 überprüfen, ob die internen Datenstrukturen für jede WM_PAINT Nachricht erforderlich sind, da eine WM_PAINT Nachricht sowohl durch einen Aktualisierungsbereich als null als auch durch einen Aufruf von RedrawWindow mit festgelegtem RDW_INTERNALPAINT Flag verursacht wurde.

Das System sendet nur einmal eine interne WM_PAINT-Nachricht . Nachdem eine interne WM_PAINT Nachricht von GetMessage oder PeekMessage zurückgegeben oder von UpdateWindow an ein Fenster gesendet wurde, postet oder sendet das System keine weiteren WM_PAINT Nachrichten, bis das Fenster ungültig ist oder redrawWindow erneut aufgerufen wird, wobei das RDW_INTERNALPAINT-Flag festgelegt ist.

Bei einigen gängigen Steuerelementen wird der wParam-Parameter vom Standard WM_PAINT Nachrichtenverarbeitung überprüft. Wenn wParam nicht NULL ist, geht das Steuerelement davon aus, dass der Wert ein HDC ist, und zeichnet mit diesem Gerätekontext.

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 (windows.h einschließen)

Siehe auch

Übersicht über Das Malen und Zeichnen

Malen und Zeichnen von Nachrichten

BeginPaint

DefWindowProc

DispatchMessage

EndPaint

GetMessage

GetUpdateRect

PeekMessage

RedrawWindow

UpdateWindow

WM_ERASEBKGND

WM_NCPAINT

WM_PRINT

WM_PRINTCLIENT