Quelques messages/notifications de gestion des fenêtres Windows

 

WM_CREATE

Message envoyé lors des appels à CreateWindow/CreateWindowEx. La procédure de gestion des messages reçoit le message après création de la fenêtre mais avant qu'elle ne devienne visible.

Image non trouvée !Si la procédure de gestion des messages retourne -1 sur ce message, la fenêtre sera automatiquement détruite. 0 pour continuer...


wParam est inutilisé

lParam contient un pointeur sur CREATESTRUCT.

WM_INITDIALOG

Equivalent à WM_CREATE mais pour des dialogues.

 

WM_DESTROY

L'utilisateur demande à quitter l'application. C'est le moment de libérer toutes les ressources ! Puis lancer un message WM_QUIT via PostQuitMessage() pour permettre à l'application de sortir de sa boucle de lecture de la file des messages.

Cf. WM_QUERYENDSESSION, WM_ENDSESSION, WM_QUIT

WM_QUIT

Message envoyé par PostQuitMessage().


wParam Le code de sortie transmis par PostQuitMessage() que votre application doit retourner au système.

lParam est inutilisé.

Cf. WM_QUERYENDSESSION, WM_ENDSESSION, WM_DESTROY

WM_SIZE (notification)

Message reçu a partir du moment où la fenêtre change de taille.

wParam
Indique le type de changement de taille

Valeur Désignation
SIZE_MAXHIDE Message is sent to all pop-up windows when some other window is maximized.
SIZE_MAXIMIZED La fenêtre occupe tout l'écran
SIZE_MAXSHOW Message is sent to all pop-up windows when some other window has been restored to its former size.
SIZE_MINIMIZED Mis sous forme d'icône
SIZE_RESTORED Modification de taille autre que taille maxi ou mini

 

lParam
La partie basse contient la largeur de la zone client.

La partie haute contient la hauteur de la zone client.

 

WM_MOVE (notification)

Message reçu lorsqu'une fenêtre a été déplacée.

wParam
N'est pas utilisé

lParam
La partie basse contient la position X de la fenêtre.

La partie haute contient la position Y de la fenêtre.

 

WM_ERASEBKGND (notification)

Ce message est envoyé à une fenêtre lorsqu'il est nécessaire d'effacer la partie cliente afin de la redessiner. Or ce message peut être néfaste lorsque votre application est un jeu. En général, vous avez déjà une procédure gérant l'affichage, et le fait que windows vide lui aussi la zone client peut dans le meilleur des cas être moche à l'écran (effet de flash), voire affecter le rendu à l'écran. Il peut alors être intéressant d'intercepter ce message, généralement pour ne rien faire !

wParam contient un pointeur sur un contexte de périphérique

Voir aussi Gérer la couleur de fond d'une fenêtre après création de celle-ci

case WM_ERASEBKGND:
return 0; // Pour indiquer à la procédure de gestion des messages par défaut que vous avez traité le message.

 

WM_QUERYENDSESSION (notification)

Si vous voulez demander confirmation avant d'interrompre ou de quitter un programme il faut traiter WM_CLOSE, mais aussi WM_QUERYENDSESSION, qui est envoyé à
chaque fenêtre lorsque l'utilisateur ferme son application dans le menu système (ou fermeture du gestionnaire de programme). Si une fenêtre répond 0 à ce message, la session Windows n'est pas interrompue.

Cf. WM_ENDSESSION, WM_DESTROY, WM_QUIT

 

WM_ENDSESSION (notification)

En complément de WM_QUERYENDSESSION, si notre fenêtre est d'accord pour terminer la session, WM_ENDSESSION est envoyé à chaque procédure de fenêtre ayant précédemment reçu un message WM_QUERYENDSESSION. Le paramètre wParam vaut 0 si la session ne peut-être interrompue car un autre programme à répondu 0.

Cf. WM_QUERYENDSESSION, WM_DESTROY, WM_QUIT

WM_SETFONT

Ce message indique qu'il faut changer de fonte (cf. fontes pour les paramètres) dans une fenêtre/contrôle.

WM_TIMER

Ce message est envoyé lorsqu'un timer a son temps écoulé.

wParam sera renseigné avec le numéro d'identification du timer.

lParam sera un pointeur sur la fonction a déclencher pour le timer (la fonction définie dans SetTimer()).

 

Les messages SB_xxxxx sont traités dans le chapitre sur la barre de status:SB_SETMINHEIGHT, SB_SETPARTS, SB_GETPARTS, SB_GETBORDERS, SB_SETTEXT, SB_GETTEXTLENGTH, SB_GETTEXT, SB_SETTIPTEXT, SB_GETTIPTEXT, SB_ISSIMPLE, SB_SIMPLE, SB_SETICON, SB_GETICON, SB_GETRECT, SB_SETBKCOLOR, SB_GETBORDERS

 

WM_DRAWITEM

Un objet a besoin d'être redessiné.

wParam sera alors l'Id de l'objet/fenêtre

lParam sera un pointeur sur une structure de type DRAWITEMSTRUCT.

Exemple avec la barre de status.

Et pour les menus

 

WM_NOTIFY

Envoyé par un contrôle à son parent pour indiquer qu'un évènement se produit, ou qu'il a besoin d'informations. wParam est l'identifiant du contrôle, lParam pointeur sur une structure NMHDR.

WM_SETFOCUS

indique qu'une fenêtre de l'application vient d'acquérir le focus (les évènements clavier, souris seront appliqués à cette fenêtre).

WM_KILLFOCUS

indique qu'une fenêtre vient de perdre le focus.

WM_KEYDOWN (Voir aussi WM_CHAR et WM_DEADCHAR) ou WM_SYSKEYDOWN (voir WM_SYSCHAR et WM_SYSDEADCHAR)

une touche est enfoncée. Voir le clavier et les messages liés.

WM_KEYUP ou WM_SYSKEYUP

une touche est relachée. Voir le clavier et les messages liés.

WM_ACTIVATEAPP

Si une application traite ce message, elle doit retourner 0. Envoyé lorsqu'une fenêtre appartenant à une autre application que la fenêtre active est sur le point d' être activés. Le message est envoyé à l'application dont la fenêtre est activé et l'application dont la fenêtre va être désactivé. wParam vaut TRUE s'il s'agit de la fenêtre qui va être activée, FALSE si en cours de désactivation. lParam identifiant du thread de l'autre fenêtre...

WM_CHILDACTIVATE

Message envoyé aux fenêtres filles ou enfants lorsque l'utilisateur clique sur la barre de titre, déplace, retaille ou active la fenêtre. Ne pas oublier de retourner 0 si vous traiter le message dans votre application (cf. fenêtres filles).

WM_GETTEXTLENGTH

Demande de la taille de la chaîne de caractères représentant le titre (cette taille peut être plus grande que la taille réelle d'affichage car certains caractères peuvent occuper plusieurs octets). La procédure DefWindowProc (Procédure de gestion des fenêtres par défaut) retourne alors cette taille dans le type LRESULT.

WM_USER ou WM_APP

Message perso. cf. thread - PostThreadMessage

WM_LBUTTONDOWN

Bouton gauche de la souris préssé. lParam contient les positions, wParam l'état des boutons de la souris.

WM_LBUTTONUP

Bouton gauche de la souris relaché. lParam contient les positions, wParam l'état des boutons de la souris.

WM_LBUTTONDBLCLK

Double cliques sur le bouton gauche de la souris. lParam contient les positions, wParam l'état des boutons de la souris.

WM_RBUTTONDOWN

Bouton droit de la souris préssé. lParam contient les positions, wParam l'état des boutons de la souris.

WM_RBUTTONUP

Bouton droit de la souris relaché. lParam contient les positions, wParam l'état des boutons de la souris.

WM_RBUTTONDBLCLK

Double cliques sur le bouton droit de la souris. lParam contient les positions, wParam l'état des boutons de la souris.

WM_MBUTTONDOWN

Bouton du milieu de la souris préssé. lParam contient les positions, wParam l'état des boutons de la souris.

WM_MBUTTONUP

Bouton du milieu de la souris relaché. lParam contient les positions, wParam l'état des boutons de la souris.

WM_MBUTTONDBLCLK

Double cliques sur le bouton du milieu de la souris. lParam contient les positions, wParam l'état des boutons de la souris.

WM_MOUSEMOVE

La souris se déplace dans la zone client de la fenêtre. lParam contient les positions, wParam l'état des boutons de la souris.

WM_DROPFILES

Message indiquant que des fichiers sont droppée sur une fenêtre. Ce message n'est pas envoyé automatiquement, il faut en effet indiquer à Windows que la fenêtre accepte ce genre d'opérations.

WM_XBUTTONDOWN, WM_XBUTTONUP, WM_XBUTTONDBLCLK

Pour les souris à plus de trois boutons...

WM_MOUSEWHEEL

Déplacement de la molette de la souris...

MSH_MOUSEWHEEL pour Windows 95 et NT 3.51 de zmouse.h

WM_DRAWCLIPBOARD

Indique à la fenêtre que le contenu du presse-papiers a changé. Il faut s'enregistrer auprès de Windows pour recevoir ce message.

WM_CHANGECBCHAIN

Indique qu'un programme se retire de la liste des Clipboard Viewer.

WM_MENUCHAR, WM_MEASUREITEM, WM_INITMENUPOPUP, WM_MENUSELECT, WM_INITMENU

Des options pour gérer les menus

WM_COMMAND

dans un menu permet de préciser l'option choisie.

Il va donc falloir différencier les messages provenant d'un menu et celui d'une fenêtre enfant, surtout si les ID correspondent. Le mieux sera donc de faire en sorte que les ID soient tous différents !
Mais si des ID étaient identiques, pas de problème, tout est prévu:
LOWORD de lParam sera à 0 pour un menu, alors qu'il contient un ID de contrôle, càd le handle de la fenêtre enfant sinon.
HIWORD est à 0 pour un menu, sinon, il s'agit du code de notification d'un contrôle.

wParam contient l'ID de menu.

WM_SYSCOMMAND

Similaire à WM_COMMAND mais pour le système. Les explications pour un menu, avec le systray

WM_NCHITTEST

Message destiné à la procédure par défaut de gestion des messages d'une fenêtre. Ce message provoquera de nouveaux messages que vous pourrez ensuite traiter.

WM_CAPTURECHANGED

Votre fenêtre vient de perdre la capture de la souris.

Annexes

Gestion de la file des messages

La procédure de gestion des messages

Envoyer des messages