WM_PAINT message
Le message WM_PAINT est envoyé lorsque le système ou une autre application demande de 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 WM_PAINT à l’aide de la fonction GetMessage ou PeekMessage .
Une fenêtre reçoit ce message via sa fonction WindowProc.
LRESULT CALLBACK WindowProc(
HWND hwnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam
);
-
wParam
-
Ce paramètre n'est pas utilisé.
-
lParam
-
Ce paramètre n'est pas utilisé.
Une application retourne zéro si elle traite ce message.
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);
}
Exemples classiques Windows sur GitHub.
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 d’appareil spécifique, utilisez le message WM_PRINT ou WM_PRINTCLIENT . Notez que la fenêtre cible doit prendre en charge le message WM_PRINTCLIENT . Les contrôles les plus 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 cadre de la 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 de messages de l’application. DispatchMessage détermine où envoyer le message ; GetMessage détermine le message à distribuer. GetMessage retourne le message WM_PAINT 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 région 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 zéro, l’application n’a pas besoin d’appeler les fonctions BeginPaint et EndPaint .
Une application doit case activée pour toute peinture interne nécessaire en examinant ses structures de données internes pour chaque message WM_PAINT, car un message WM_PAINT peut avoir été provoqué à la fois par une région de mise à jour non NULL et un appel à RedrawWindow avec l’indicateur RDW_INTERNALPAINT défini.
Le système n’envoie un message de WM_PAINT interne qu’une seule fois. Une fois qu’un message de WM_PAINT interne est retourné à partir de GetMessage ou PeekMessage ou envoyé à une fenêtre par UpdateWindow, le système ne publie ni n’envoie d’autres messages WM_PAINT tant que la fenêtre n’est pas invalidée ou jusqu’à ce que RedrawWindow soit à nouveau appelé avec l’indicateur RDW_INTERNALPAINT défini.
Pour certains contrôles courants, la WM_PAINT par défaut le traitement des messages vérifie le paramètre wParam . Si wParam n’a pas la valeur NULL, le contrôle suppose que la valeur est un HDC et peint à l’aide de ce contexte d’appareil.
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 |
|