Réception des notifications de contrôles communs
Les contrôles courants sont des fenêtres enfants qui envoient des messages de notification à la fenêtre parente lorsque des événements, tels que l’entrée de l’utilisateur, se produisent dans le contrôle.
L’application s’appuie sur ces messages de notification pour déterminer l’action que l’utilisateur souhaite prendre. Les contrôles les plus courants envoient des messages de notification en tant que messages WM_NOTIFY. Les contrôles Windows envoient la plupart des messages de notification en tant que messages WM_COMMAND. CWnd ::OnNotify est le gestionnaire du message WM_NOTIFY. Comme avec CWnd::OnCommand
, l’implémentation de OnNotify
dispatche le message de notification vers pour OnCmdMsg
la gestion dans les mappages de messages. L’entrée de mappage de messages pour la gestion des notifications est ON_NOTIFY. Pour plus d’informations, consultez la Note technique 61 : ON_NOTIFY et WM_NOTIFY Messages.
Sinon, une classe dérivée peut gérer ses propres messages de notification à l’aide de la « réflexion de message ». Pour plus d’informations, consultez la Note technique 62 : Message Réflexions ion pour les contrôles Windows.
Récupération de la position du curseur dans un message de notification
À l’occasion, il est utile de déterminer la position actuelle du curseur lorsque certains messages de notification sont reçus par un contrôle commun. Par exemple, il serait utile de déterminer l’emplacement actuel du curseur lorsqu’un contrôle commun reçoit un message de notification NM_RCLICK.
Il existe un moyen simple d’y parvenir en appelant CWnd::GetCurrentMessage
. Toutefois, cette méthode récupère uniquement la position du curseur au moment de l’envoi du message. Étant donné que le curseur a peut-être été déplacé depuis que le message a été envoyé, vous devez appeler CWnd::GetCursorPos
pour obtenir la position actuelle du curseur.
Remarque
CWnd::GetCurrentMessage
ne doit être appelé qu’au sein d’un gestionnaire de messages.
Ajoutez le code suivant au corps du gestionnaire de messages de notification (dans cet exemple, NM_RCLICK) :
CPoint cursorPos;
cursorPos.x = GetCurrentMessage()->pt.x;
cursorPos.y = GetCurrentMessage()->pt.y;
À ce stade, l’emplacement du curseur de la souris est stocké dans l’objet cursorPos
.