_Message de peinture WM

Le message WM _ Paint est envoyé lorsque le système ou une autre application effectue une requête pour peindre une partie de la fenêtre d’une application. Le message est envoyé lorsque la fonction UpdateWindow ou RedrawWindow est appelée, ou par la fonction DispatchMessage lorsque l’application obtient un message de _ peinture WM à l’aide de la fonction GetMessage ou PeekMessage .

Une fenêtre reçoit ce message par le biais de sa fonction WindowProc .

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

Paramètres

wParam

Ce paramètre n'est pas utilisé.

lParam

Ce paramètre n'est pas utilisé.

Valeur de retour

Une application retourne la valeur zéro si elle traite ce message.

Exemple

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

exemple de Windows exemples classiques sur GitHub.

Notes

Le message WM _ Paint est généré par le système et ne doit pas être envoyé par une application. Pour forcer une fenêtre à dessiner dans un contexte de périphérique spécifique, utilisez le message WM _ Print ou WM _ PRINTCLIENT . Notez que cela nécessite que la fenêtre cible prenne en charge le message WM _ PRINTCLIENT . La plupart des contrôles courants prennent en charge le message WM _ PRINTCLIENT .

La fonction DefWindowProc valide la région de mise à jour. La fonction peut également envoyer le message WM _ NCPAINT à la procédure de fenêtre si le frame de fenêtre doit être peint et envoyer le message WM _ ERASEBKGND si l’arrière-plan de la fenêtre doit être effacé.

Le système envoie ce message lorsqu’il n’y a pas d’autres messages dans la file d’attente des messages de l’application. DispatchMessage détermine où envoyer le message. GetMessage détermine le message à distribuer. GetMessage retourne le message de _ peinture WM lorsqu’il n’y a pas d’autres messages dans la file d’attente de messages de l’application, et DispatchMessage envoie le message à la procédure de fenêtre appropriée.

Une fenêtre peut recevoir des messages de peinture internes suite à l’appel de RedrawWindow avec l' _ indicateur RDW INTERNALPAINT défini. Dans ce cas, la fenêtre peut ne pas avoir de zone de mise à jour. Une application peut appeler la fonction GetUpdateRect pour déterminer si la fenêtre a une région de mise à jour. Si GetUpdateRect retourne la valeur zéro, l’application n’a pas besoin d’appeler les fonctions BeginPaint et EndPaint .

Une application doit vérifier s’il existe des peintures internes nécessaires en examinant ses structures de données internes pour chaque message WM _ Paint , car un message _ WM peut avoir été provoqué par une région de mise à jour non null et un appel à RedrawWindow avec l' _ indicateur RDW INTERNALPAINT défini.

Le système envoie un message de _ peinture WM interne une seule fois. Après qu’un message de _ peinture WM interne a été retourné à partir de GetMessage ou PeekMessage ou qu’il est envoyé à une fenêtre par UpdateWindow, le système ne publie pas ou n’envoie pas d’autres messages de _ peinture WM tant que la fenêtre n’est pas invalidée ou jusqu’à ce que RedrawWindow soit rappelé avec l' _ indicateur RDW INTERNALPAINT défini.

Pour certains contrôles courants, le traitement du message de _ peinture WM par défaut vérifie le paramètre wParam . Si wParam est non null, le contrôle suppose que la valeur est un HDC et peint à l’aide de ce contexte de périphérique.

Spécifications

Condition requise Valeur
Client minimal pris en charge
Windows 2000 Professionnel - [Applications de bureau uniquement]
Serveur minimal pris en charge
Windows 2000 Server - [Applications de bureau uniquement]
En-tête
Winuser. h (inclure Windows. h)

Voir aussi

Vue d’ensemble de la peinture et du dessin

Peinture et dessin de messages

BeginPaint

DefWindowProc

DispatchMessage

EndPaint

GetMessage

GetUpdateRect

PeekMessage

RedrawWindow

UpdateWindow

_ERASEBKGND WM

_NCPAINT WM

_impression WM

_PRINTCLIENT WM