WM_PAINT messaggio

Il messaggio di WM_PAINT viene inviato quando il sistema o un'altra applicazione effettua una richiesta per disegnare una parte della finestra di un'applicazione. Il messaggio viene inviato quando viene chiamata la funzione UpdateWindow o RedrawWindow oppure dalla funzione DispatchMessage quando l'applicazione ottiene un messaggio WM_PAINT usando la funzione GetMessage o PeekMessage .

Una finestra riceve questo messaggio tramite la relativa funzione WindowProc .

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

Parametri

wParam

Questo parametro non viene usato.

lParam

Questo parametro non viene usato.

Valore restituito

Un'applicazione restituisce zero se elabora questo messaggio.

Esempio

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);
}

Esempio di esempi classici di Windows in GitHub.

Commenti

Il messaggio WM_PAINT viene generato dal sistema e non deve essere inviato da un'applicazione. Per forzare un disegno di una finestra in un contesto di dispositivo specifico, usare il messaggio WM_PRINT o WM_PRINTCLIENT . Si noti che è necessario che la finestra di destinazione supporti il messaggio di WM_PRINTCLIENT . I controlli più comuni supportano il messaggio di WM_PRINTCLIENT .

La funzione DefWindowProc convalida l'area di aggiornamento. La funzione può anche inviare il messaggio di WM_NCPAINT alla procedura della finestra se la cornice della finestra deve essere dipinta e inviare il messaggio di WM_ERASEBKGND se lo sfondo della finestra deve essere cancellato.

Il sistema invia questo messaggio quando non sono presenti altri messaggi nella coda dei messaggi dell'applicazione. DispatchMessage determina dove inviare il messaggio; GetMessage determina il messaggio da inviare. GetMessage restituisce il messaggio di WM_PAINT quando non sono presenti altri messaggi nella coda dei messaggi dell'applicazione e DispatchMessage invia il messaggio alla procedura di finestra appropriata.

Una finestra può ricevere messaggi di disegno interni in seguito alla chiamata di RedrawWindow con il flag di RDW_INTERNALPAINT impostato. In questo caso, la finestra potrebbe non avere un'area di aggiornamento. Un'applicazione può chiamare la funzione GetUpdateRect per determinare se la finestra ha un'area di aggiornamento. Se GetUpdateRect restituisce zero, l'applicazione non deve chiamare le funzioni BeginPaint e EndPaint .

Un'applicazione deve verificare la presenza di un disegno interno necessario esaminando le relative strutture dati interne per ogni messaggio WM_PAINT , perché un messaggio WM_PAINT potrebbe essere stato causato da un'area di aggiornamento non NULL e da una chiamata a RedrawWindow con il flag RDW_INTERNALPAINT impostato.

Il sistema invia un messaggio interno WM_PAINT una sola volta. Dopo che un messaggio interno WM_PAINT viene restituito da GetMessage o PeekMessage o viene inviato a una finestra da UpdateWindow, il sistema non pubblica o invia altri messaggi WM_PAINT fino a quando la finestra non è invalidata o fino a quando RedrawWindow viene chiamato di nuovo con il flag di RDW_INTERNALPAINT impostato.

Per alcuni controlli comuni, l'elaborazione di messaggi di WM_PAINT predefinita controlla il parametro wParam . Se wParam non è NULL, il controllo presuppone che il valore sia un HDC e dipinga usando il contesto del dispositivo.

Requisiti

Requisito Valore
Client minimo supportato
Windows 2000 Professional [solo app desktop]
Server minimo supportato
Windows 2000 Server [solo app desktop]
Intestazione
Winuser.h (include Windows.h)

Vedi anche

Panoramica di disegno e disegno

Disegno e disegno di messaggi

Beginpaint

DefWindowProc

DispatchMessage

EndPaint

GetMessage

GetUpdateRect

PeekMessage

RedrawWindow

UpdateWindow

WM_ERASEBKGND

WM_NCPAINT

WM_PRINT

WM_PRINTCLIENT