Vue d’ensemble de la saisie de la souris
La souris est un dispositif de saisie utilisateur important mais facultatif pour les applications. Une application bien écrite devrait inclure une interface pour la souris, mais ne doit pas dépendre uniquement de la souris pour acquérir la saisie utilisateur. L’application devrait également fournir un support complet du clavier.
Une application reçoit la saisie de la souris sous forme de messages envoyés ou postés à ses fenêtres.
Cette section couvre les sujets suivants :
- Curseur de la souris
- Capture de la souris
- Mouse ClickLock
- Configuration de la souris
- XBUTTONs
- Messages de la souris
- Mouse Sonar
- Mouse Vanish
- La molette de la souris
- Activation de la fenêtre
Curseur de la souris
Lorsque l’utilisateur déplace la souris, le système déplace une image bitmap à l’écran appelée curseur de la souris. Le curseur de la souris contient un point d’un pixel appelé le point d’ancrage, un point que le système suit et reconnaît comme étant la position du curseur. Lorsqu’un événement de la souris se produit, la fenêtre qui contient le point d’ancrage reçoit généralement le message de la souris résultant de l’événement. La fenêtre n’a pas besoin d’être active ou d’avoir le focus clavier pour recevoir un message de la souris.
Le système maintient une variable qui contrôle la vitesse de la souris, c’est-à-dire la distance que parcourt le curseur lorsque l’utilisateur déplace la souris. Vous pouvez utiliser la fonction SystemParametersInfo avec l’indicateur SPI_GETMOUSE ou SPI_SETMOUSE pour récupérer ou définir la vitesse de la souris. Pour plus d’informations sur les curseurs de la souris, veuillez consulter la section Curseurs.
Capture de la souris
Le système poste généralement un message de la souris à la fenêtre qui contient le point d’ancrage du curseur lorsqu’un événement de la souris se produit. Une application peut modifier ce comportement en utilisant la fonction SetCapture pour acheminer les messages de la souris vers une fenêtre spécifique. La fenêtre reçoit tous les messages de la souris jusqu’à ce que l’application appelle la fonction ReleaseCapture ou spécifie une autre fenêtre de capture, ou jusqu’à ce que l’utilisateur clique sur une fenêtre créée par un autre thread.
Lorsque la capture de la souris change, le système envoie un message WM_CAPTURECHANGED à la fenêtre qui perd la capture de la souris. Le paramètre lParam du message spécifie un handle vers la fenêtre qui acquiert la capture de la souris.
Seule la fenêtre de premier plan peut capturer la saisie de la souris. Lorsqu’une fenêtre en arrière-plan tente de capturer la saisie de la souris, elle ne reçoit des messages que pour les événements de la souris qui se produisent lorsque le point d’ancrage du curseur se trouve dans la partie visible de la fenêtre.
La capture de la saisie de la souris est utile si une fenêtre doit recevoir toute la saisie de la souris, même lorsque le curseur se déplace en dehors de la fenêtre. Par exemple, une application suit généralement la position du curseur après un événement de clic sur un bouton de la souris, en suivant le curseur jusqu’à ce qu’un événement de relâchement du bouton de la souris se produise. Si une application n’a pas capturé la saisie de la souris et que l’utilisateur relâche le bouton de la souris en dehors de la fenêtre, la fenêtre ne reçoit pas le message de relâchement du bouton.
Un thread peut utiliser la fonction GetCapture pour déterminer si une de ses fenêtres a capturé la souris. Si l’une des fenêtres du thread a capturé la souris, GetCapture récupère un handle vers la fenêtre.
Mouse ClickLock
La fonctionnalité d’accessibilité Mouse ClickLock permet à un utilisateur de verrouiller le bouton principal de la souris après un seul clic. Pour une application, il semble que le bouton soit encore enfoncé. Pour déverrouiller le bouton, une application peut envoyer n’importe quel message de la souris ou l’utilisateur peut cliquer sur n’importe quel bouton de la souris. Cette fonctionnalité permet à un utilisateur de réaliser des combinaisons complexes avec la souris plus facilement. Par exemple, les personnes ayant certaines limitations physiques peuvent surligner du texte, déplacer des objets ou ouvrir des menus plus simplement. Pour plus d’informations, veuillez consulter les indicateurs suivants et les Remarques dans SystemParametersInfo :
- SPI_GETMOUSECLICKLOCK
- SPI_SETMOUSECLICKLOCK
- SPI_GETMOUSECLICKLOCKTIME
- SPI_SETMOUSECLICKLOCKTIME
Configuration de la souris
Bien que la souris soit un dispositif de saisie important pour les applications, chaque utilisateur n’a pas nécessairement une souris. Une application peut déterminer si le système inclut une souris en passant la valeur SM_MOUSEPRESENT à la fonction GetSystemMetrics.
Windows prend en charge une souris ayant jusqu’à trois boutons. Sur une souris à trois boutons, les boutons sont désignés comme les boutons gauche, milieu et droit. Les messages et constantes nommées relatifs aux boutons de la souris utilisent les lettres L, M et R pour identifier les boutons. Le bouton d’une souris à un seul bouton est considéré comme le bouton gauche. Bien que Windows prenne en charge une souris à plusieurs boutons, la plupart des applications utilisent principalement le bouton gauche et les autres de manière minimale, voire pas du tout.
Les applications peuvent également prendre en charge une molette de souris. La molette de la souris peut être pressée ou tournée. Lorsque la molette de la souris est pressée, elle agit comme le bouton du milieu (troisième bouton), envoyant des messages normaux de bouton du milieu à votre application. Lorsqu’elle est tournée, un message de molette est envoyé à votre application. Pour plus d’informations, veuillez consulter la section La molette de la souris.
Les applications peuvent prendre en charge des boutons de commande d’application. Ces boutons, appelés boutons X, sont conçus pour permettre un accès plus facile à un navigateur Internet, à la messagerie électronique et aux services multimédias. Lorsqu’un bouton X est pressé, un message WM_APPCOMMAND est envoyé à votre application. Pour plus d’informations, veuillez consulter la description du message WM_APPCOMMAND.
Une application peut déterminer le nombre de boutons de la souris en passant la valeur SM_CMOUSEBUTTONS à la fonction GetSystemMetrics. Pour configurer la souris pour un utilisateur gaucher, l’application peut utiliser la fonction SwapMouseButton pour inverser la signification des boutons gauche et droit de la souris. Passer la valeur SPI_SETMOUSEBUTTONSWAP à la fonction SystemParametersInfo est une autre façon d’inverser la signification des boutons. Notez, cependant, que la souris est une ressource partagée, donc inverser la signification des boutons affecte toutes les applications.
XBUTTONs
Windows prend en charge une souris à cinq boutons. En plus des boutons gauche, milieu et droit, il existe XBUTTON1 et XBUTTON2, qui permettent de naviguer en arrière et en avant lors de l’utilisation de votre navigateur.
Le gestionnaire de fenêtres prend en charge XBUTTON1 et XBUTTON2 via les messages WM_XBUTTON* et WM_NCXBUTTON*. Le HIWORD du WPARAM dans ces messages contient un indicateur indiquant quel bouton X a été pressé. Étant donné que ces messages de la souris s’insèrent également entre les constantes WM_MOUSEFIRST et WM_MOUSELAST, une application peut filtrer tous les messages de la souris avec GetMessage ou PeekMessage.
Les éléments suivants prennent en charge XBUTTON1 et XBUTTON2 :
- WM_APPCOMMAND
- WM_NCXBUTTONDBLCLK
- WM_NCXBUTTONDOWN
- WM_NCXBUTTONUP
- WM_XBUTTONDBLCLK
- WM_XBUTTONDOWN
- WM_XBUTTONUP
- MOUSEHOOKSTRUCTEX
Les API suivantes ont été modifiées pour prendre en charge ces boutons :
Il est peu probable qu’une fenêtre enfant dans une application composant puisse implémenter directement des commandes pour XBUTTON1 et XBUTTON2. Ainsi, DefWindowProc envoie un message WM_APPCOMMAND à une fenêtre lorsqu’un bouton X est cliqué. DefWindowProc envoie également le message WM_APPCOMMAND à sa fenêtre parente. Cela est similaire à la manière dont les menus contextuels sont invoqués avec un clic droit : DefWindowProc envoie un message WM_CONTEXTMENU au menu et l’envoie également à sa fenêtre parente. De plus, si DefWindowProc reçoit un message WM_APPCOMMAND pour une fenêtre de premier niveau, il appelle un hook shell avec le code HSHELL_APPCOMMAND.
Il y a un support pour les claviers ayant des touches supplémentaires pour les fonctions de navigation, les fonctions multimédias, le lancement d’applications et la gestion de l’alimentation. Pour plus d’informations, veuillez consulter Touches de clavier pour la navigation et autres fonctions.
Messages de la souris
La souris génère un événement de saisie lorsque l’utilisateur déplace la souris, ou appuie ou relâche un bouton de la souris. Le système convertit les événements de saisie de la souris en messages et les poste à la file de messages du thread approprié. Lorsque les messages de la souris sont postés plus rapidement qu’un thread ne peut les traiter, le système ignore tous les messages de la souris sauf le plus récent.
Une fenêtre reçoit un message de la souris lorsqu’un événement de la souris se produit pendant que le curseur est à l’intérieur des bordures de la fenêtre, ou lorsque la fenêtre a capturé la souris. Les messages de la souris sont divisés en deux groupes : messages de la zone client et messages de la zone non-client. Généralement, une application traite les messages de la zone client et ignore les messages de la zone non-client.
Cette section couvre les sujets suivants :
- Messages de la souris dans la zone client
- Messages de la souris dans la zone non-client
- Le message WM_NCHITTEST
Messages de la souris dans la zone client
Une fenêtre reçoit un message de la souris dans la zone client lorsqu’un événement de la souris se produit dans la zone client de la fenêtre. Le système poste le message WM_MOUSEMOVE à la fenêtre lorsque l’utilisateur déplace le curseur dans la zone client. Il poste l’un des messages suivants lorsque l’utilisateur appuie ou relâche un bouton de la souris pendant que le curseur se trouve dans la zone client.
Message | Signification |
---|---|
WM_LBUTTONDBLCLK | Le bouton gauche de la souris a été double-cliqué. |
WM_LBUTTONDOWN | Le bouton gauche de la souris a été pressé. |
WM_LBUTTONUP | Le bouton gauche de la souris a été relâché. |
WM_MBUTTONDBLCLK | Le bouton du milieu de la souris a été double-cliqué. |
WM_MBUTTONDOWN | Le bouton du milieu de la souris a été pressé. |
WM_MBUTTONUP | Le bouton du milieu de la souris a été relâché. |
WM_RBUTTONDBLCLK | Le bouton droit de la souris a été double-cliqué. |
WM_RBUTTONDOWN | Le bouton droit de la souris a été pressé. |
WM_RBUTTONUP | Le bouton droit de la souris a été relâché. |
WM_XBUTTONDBLCLK | Un bouton X de la souris a été double-cliqué. |
WM_XBUTTONDOWN | Un bouton X de la souris a été pressé. |
WM_XBUTTONUP | Un bouton X de la souris a été relâché. |
En outre, une application peut appeler la fonction TrackMouseEvent pour demander au système d’envoyer deux autres messages. Il poste le message WM_MOUSEHOVER lorsque le curseur survole la zone client pendant un certain temps. Il poste le message WM_MOUSELEAVE lorsque le curseur quitte la zone client.
Paramètres de message
Le paramètre lParam d’un message de la souris dans la zone client indique la position du point d’ancrage du curseur. Le mot de poids faible indique la coordonnée x du point d’ancrage, et le mot de poids élevé indique la coordonnée y. Les coordonnées sont spécifiées en coordonnées de la zone client. Dans le système de coordonnées de la zone client, tous les points de l’écran sont spécifiés par rapport aux coordonnées (0,0) du coin supérieur gauche de la zone client.
Le paramètre wParam contient des indicateurs qui indiquent l’état des autres boutons de la souris et des touches CTRL et SHIFT au moment de l’événement de la souris. Vous pouvez vérifier ces indicateurs lorsque le traitement des messages de la souris dépend de l’état d’un autre bouton de la souris ou de la touche CTRL ou SHIFT. Le paramètre wParam peut être une combinaison des valeurs suivantes.
Valeur | Description |
---|---|
MK_CONTROL | La touche CTRL est enfoncée. |
MK_LBUTTON | Le bouton gauche de la souris est enfoncé. |
MK_MBUTTON | Le bouton central de la souris est enfoncé. |
MK_RBUTTON | Le bouton droit de la souris est enfoncé. |
MK_SHIFT | La touche MAJ est enfoncée. |
MK_XBUTTON1 | Le premier bouton X est enfoncé. |
MK_XBUTTON2 | Le deuxième bouton X est enfoncé. |
Messages de double-clic
Le système génère un message de double-clic lorsque l’utilisateur clique deux fois rapidement sur un bouton de la souris. Lorsque l’utilisateur clique sur un bouton, le système établit un rectangle centré autour du point d’ancrage du curseur. Il marque également l’heure à laquelle le clic s’est produit. Lorsque l’utilisateur clique une deuxième fois sur le même bouton, le système détermine si le point d’ancrage se trouve toujours dans le rectangle et calcule le temps écoulé depuis le premier clic. Si le point d’ancrage se trouve toujours dans le rectangle et que le temps écoulé ne dépasse pas la valeur du délai d’attente du double-clic, le système génère un message de double-clic.
Une application peut obtenir et définir les valeurs du délai d’attente du double-clic en utilisant respectivement les fonctions GetDoubleClickTime et SetDoubleClickTime. L’application peut également définir la valeur du délai d’attente du double-clic en utilisant l’indicateur SPI_SETDOUBLECLICKTIME avec la fonction SystemParametersInfo. Elle peut également définir la taille du rectangle que le système utilise pour détecter les doubles-clics en passant les indicateurs SPI_SETDOUBLECLKWIDTH et SPI_SETDOUBLECLKHEIGHT à SystemParametersInfo. Notez cependant que la définition de la valeur du délai d’attente du double-clic et du rectangle affecte toutes les applications.
Une fenêtre définie par l’application ne reçoit pas, par défaut, de messages de double-clic. En raison de la surcharge du système impliquée dans la génération de messages de double-clic, ces messages ne sont générés que pour les fenêtres appartenant à des classes qui ont le style de classe CS_DBLCLKS. Votre application doit définir ce style lors de l’enregistrement de la classe de la fenêtre. Pour plus d’informations, consultez Classes Window.
Un message de double-clic est toujours le troisième message dans une série de quatre messages. Les deux premiers messages sont les messages d’appui et de relâchement du bouton générés par le premier clic. Le deuxième clic génère le message de double-clic suivi d’un autre message de relâchement de bouton. Par exemple, un double-clic sur le bouton gauche de la souris génère la séquence de messages suivante :
Parce qu’une fenêtre reçoit toujours un message d’appui sur le bouton avant de recevoir un message de double-clic, une application utilise généralement un message de double-clic pour prolonger une tâche qu’elle a commencée lors d’un message d’appui sur le bouton. Par exemple, lorsque l’utilisateur clique sur une couleur dans la palette de couleurs de Microsoft Paint, Paint affiche la couleur sélectionnée à côté de la palette. Lorsque l’utilisateur double-clique sur une couleur, Paint affiche la couleur et ouvre la boîte de dialogue Modifier les couleurs.
Messages de la souris dans la zone non-client
Une fenêtre reçoit un message de la souris dans la zone non-client lorsqu’un événement de la souris se produit dans n’importe quelle partie de la fenêtre sauf la zone client. La zone non-client d’une fenêtre comprend sa bordure, sa barre de menu, sa barre de titre, sa barre de défilement, son menu de fenêtre, son bouton de réduction et son bouton de maximisation.
Le système génère des messages de la zone non-client principalement pour son propre usage. Par exemple, le système utilise des messages de la zone non-client pour changer le curseur en une flèche à deux têtes lorsque le point d’ancrage du curseur se déplace dans la bordure d’une fenêtre. Une fenêtre doit transmettre les messages de la zone non-client à la fonction DefWindowProc pour profiter de l’interface souris intégrée.
Il existe un message de la souris dans la zone non-client correspondant à chaque message de la souris dans la zone client. Les noms de ces messages sont similaires, sauf que les constantes nommées pour les messages de la zone non-client incluent les lettres NC. Par exemple, déplacer le curseur dans la zone non-client génère un message WM_NCMOUSEMOVE, et appuyer sur le bouton gauche de la souris alors que le curseur se trouve dans la zone non-client génère un message WM_NCLBUTTONDOWN.
Le paramètre lParam d’un message de la souris dans la zone non-client est une structure qui contient les coordonnées x et y du point d’ancrage du curseur. Contrairement aux coordonnées des messages de la souris dans la zone client, les coordonnées sont spécifiées en coordonnées de l’écran plutôt qu’en coordonnées de la zone client. Dans le système de coordonnées de l’écran, tous les points de l’écran sont relatifs aux coordonnées (0,0) du coin supérieur gauche de l’écran.
Le paramètre wParam contient une valeur de test de zone, une valeur qui indique où, dans la zone non-client, l’événement de la souris s’est produit. La section suivante explique le but des valeurs de test de zone.
Le message WM_NCHITTEST
Chaque fois qu’un événement de la souris se produit, le système envoie un message WM_NCHITTEST soit à la fenêtre qui contient le point d’ancrage du curseur, soit à la fenêtre qui a capturé la souris. Le système utilise ce message pour déterminer s’il faut envoyer un message de souris dans la zone client ou non-client. Une application qui doit recevoir des messages de déplacement de la souris et de bouton de la souris doit transmettre le message WM_NCHITTEST à la fonction DefWindowProc.
Le paramètre lParam du message WM_NCHITTEST contient les coordonnées de l’écran du point d’ancrage du curseur. La fonction DefWindowProc examine les coordonnées et renvoie une valeur de test de zone qui indique l’emplacement du point d’ancrage. La valeur de test de zone peut être l’une des valeurs suivantes.
Valeur | Emplacement du point d’ancrage |
---|---|
HTBORDER | Dans la bordure d’une fenêtre qui n’a pas de bordure de dimensionnement. |
HTBOTTOM | Dans la bordure horizontale inférieure d’une fenêtre. |
HTBOTTOMLEFT | Dans le coin inférieur gauche d’une bordure de fenêtre. |
HTBOTTOMRIGHT | Dans le coin inférieur droit d’une bordure de fenêtre. |
HTCAPTION | Dans une barre de titre. |
HTCLIENT | Dans une zone cliente. |
HTCLOSE | Dans un bouton Fermer. |
HTERROR | Sur l’arrière-plan de l’écran ou sur une ligne de séparation entre les fenêtres (même que HTNOWHERE, sauf que la fonction DefWindowProc produit un bip système pour indiquer une erreur). |
HTGROWBOX | Dans une zone de dimensionnement (identique à HTSIZE). |
HTHELP | Dans un bouton Aide. |
HTHSCROLL | Dans une barre de défilement horizontale. |
HTLEFT | Dans la bordure gauche d’une fenêtre. |
HTMENU | Dans un menu. |
HTMAXBUTTON | Dans un bouton Agrandir. |
HTMINBUTTON | Dans un bouton Réduire. |
HTNOWHERE | Sur l’arrière-plan de l’écran ou sur une ligne de séparation entre des fenêtres. |
HTREDUCE | Dans un bouton Réduire. |
HTRIGHT | Dans la bordure droite d’une fenêtre. |
HTSIZE | Dans une zone de dimensionnement (identique à HTGROWBOX). |
HTSYSMENU | Dans un menu Système ou dans un bouton Fermer d’une fenêtre enfant. |
HTTOP | Dans la bordure supérieure horizontale d’une fenêtre. |
HTTOPLEFT | Dans le coin supérieur gauche d’une bordure de fenêtre. |
HTTOPRIGHT | Dans le coin supérieur droit d’une bordure de fenêtre. |
HTTRANSPARENT | Dans une fenêtre actuellement couverte par une autre fenêtre dans le même thread. |
HTVSCROLL | Dans la barre de défilement vertical. |
HTZOOM | Dans un bouton Agrandir. |
Si le curseur se trouve dans la zone client d’une fenêtre, DefWindowProc renvoie la valeur de test de zone HTCLIENT à la procédure de la fenêtre. Lorsque la procédure de la fenêtre renvoie ce code au système, le système convertit les coordonnées de l’écran du point d’ancrage du curseur en coordonnées de la zone client, puis poste le message de souris approprié dans la zone client.
La fonction DefWindowProc renvoie l’une des autres valeurs de test de zone lorsque le point d’ancrage du curseur se trouve dans la zone non-client d’une fenêtre. Lorsque la procédure de la fenêtre renvoie l’une de ces valeurs de test de zone, le système poste un message de la souris dans la zone non-client, en plaçant la valeur de test de zone dans le paramètre wParam du message et les coordonnées du curseur dans le paramètre lParam.
Mouse Sonar
La fonctionnalité d’accessibilité Mouse Sonar affiche brièvement plusieurs cercles concentriques autour du pointeur lorsque l’utilisateur appuie et relâche la touche CTRL. Cette fonctionnalité aide un utilisateur à localiser le pointeur de la souris sur un écran encombré ou avec une résolution élevée, sur un moniteur de mauvaise qualité, ou pour les utilisateurs ayant une vision altérée. Pour plus d’informations, veuillez consulter les indicateurs suivants dans SystemParametersInfo :
SPI_GETMOUSESONAR
SPI_SETMOUSESONAR
Mouse Vanish
La fonctionnalité d’accessibilité Mouse Vanish cache le pointeur lorsque l’utilisateur tape. Le pointeur de la souris réapparaît lorsque l’utilisateur déplace la souris. Cette fonctionnalité empêche le pointeur d’obscurcir le texte en cours de saisie, par exemple, dans un e-mail ou un autre document. Pour plus d’informations, veuillez consulter les indicateurs suivants dans SystemParametersInfo :
SPI_GETMOUSEVANISH
SPI_SETMOUSEVANISH
La molette de la souris
La molette de la souris combine les fonctionnalités d’une molette et d’un bouton de souris. La molette comporte des crans discrets et régulièrement espacés. Lorsque vous tournez la molette, un message de molette est envoyé à votre application à chaque cran rencontré. Le bouton de la molette peut également fonctionner comme un bouton du milieu normal de Windows (troisième bouton). Appuyer et relâcher la molette de la souris envoie les messages standard WM_MBUTTONUP et WM_MBUTTONDOWN. Double-cliquer sur le troisième bouton envoie le message standard WM_MBUTTONDBLCLK.
La molette de la souris est prise en charge par le message WM_MOUSEWHEEL.
Tourner la molette de la souris envoie le message WM_MOUSEWHEEL à la fenêtre ayant le focus. La fonction DefWindowProc propage le message au parent de la fenêtre. Il ne devrait pas y avoir de transfert interne du message, car DefWindowProc le propage dans la chaîne parente jusqu’à ce qu’une fenêtre le traite.
Détermination du nombre de lignes à faire défiler
Les applications doivent utiliser la fonction SystemParametersInfo pour récupérer le nombre de lignes qu’un document fait défiler à chaque opération de défilement (cran de molette). Pour récupérer le nombre de lignes, une application fait l’appel suivant :
SystemParametersInfo(SPI_GETWHEELSCROLLLINES, 0, pulScrollLines, 0)
La variable « pulScrollLines » pointe vers une valeur entière non signée qui reçoit le nombre suggéré de lignes à faire défiler lorsque la molette de la souris est tournée sans les touches modificateurs :
- Si ce nombre est 0, aucun défilement ne doit se produire.
- Si ce nombre est WHEEL_PAGESCROLL, un tour de molette doit être interprété comme un clic dans les régions page suivante ou page précédente de la barre de défilement.
- Si le nombre de lignes à faire défiler est supérieur au nombre de lignes visibles, l’opération de défilement doit également être interprétée comme une opération de page suivante ou de page précédente.
La valeur par défaut du nombre de lignes à faire défiler est de 3. Si un utilisateur modifie le nombre de lignes à faire défiler, en utilisant la feuille de propriétés de la souris dans le Panneau de configuration, le système d’exploitation diffuse un message WM_SETTINGCHANGE à toutes les fenêtres de premier niveau avec SPI_SETWHEELSCROLLLINES spécifié. Lorsqu’une application reçoit le message WM_SETTINGCHANGE, elle peut alors obtenir le nouveau nombre de lignes à faire défiler en appelant :
SystemParametersInfo(SPI_GETWHEELSCROLLLINES, 0, pulScrollLines, 0)
Contrôles avec défilement
Le tableau ci-dessous répertorie les contrôles avec des fonctionnalités de défilement (y compris les lignes de défilement définies par l’utilisateur).
Control | Scrolling |
---|---|
Contrôle Edit | Vertical et horizontal. |
Contrôle zone de liste | Vertical et horizontal. |
Zone de liste modifiable | Lorsque la liste n’est pas déroulée, chaque défilement récupère l’élément suivant ou précédent. Lorsque la liste est déroulée, chaque défilement transfère le message à la zone de liste, qui défile en conséquence. |
CMD (ligne de commande) | Vertical. |
Arborescence | Vertical et horizontal. |
ListView | Vertical et horizontal. |
Défilements Haut/Bas | Un élément à la fois. |
Barre de défilement | Un élément à la fois. |
Microsoft Rich Edit 1.0 | Vertical. Notez que le client Exchange a ses propres versions des contrôles de l’affichage en mode liste et de l’arborescence qui ne prennent pas en charge la molette. |
Microsoft Rich Edit 2.0 | Vertical. |
Détection d’une souris avec une molette
Pour déterminer si une souris avec une molette est connectée, appelez GetSystemMetrics avec SM_MOUSEWHEELPRESENT. Une valeur de retour TRUE indique que la souris est connectée.
L’exemple suivant provient de la procédure de la fenêtre pour un contrôle d’édition multiligne :
BOOL ScrollLines(
PWNDDATA pwndData, //scrolls the window indicated
int cLinesToScroll); //number of times
short gcWheelDelta; //wheel delta from roll
PWNDDATA pWndData; //pointer to structure containing info about the window
UINT gucWheelScrollLines=0;//number of lines to scroll on a wheel rotation
gucWheelScrollLines = SystemParametersInfo(SPI_GETWHEELSCROLLLINES,
0,
pulScrollLines,
0);
case WM_MOUSEWHEEL:
/*
* Do not handle zoom and datazoom.
*/
if (wParam & (MK_SHIFT | MK_CONTROL)) {
goto PassToDefaultWindowProc;
}
gcWheelDelta -= (short) HIWORD(wParam);
if (abs(gcWheelDelta) >= WHEEL_DELTA && gucWheelScrollLines > 0)
{
int cLineScroll;
/*
* Limit a roll of one (1) WHEEL_DELTA to
* scroll one (1) page.
*/
cLineScroll = (int) min(
(UINT) pWndData->ichLinesOnScreen - 1,
gucWheelScrollLines);
if (cLineScroll == 0) {
cLineScroll++;
}
cLineScroll *= (gcWheelDelta / WHEEL_DELTA);
assert(cLineScroll != 0);
gcWheelDelta = gcWheelDelta % WHEEL_DELTA;
return ScrollLines(pWndData, cLineScroll);
}
break;
Activation de la fenêtre
Lorsque l’utilisateur clique sur une fenêtre de premier niveau inactive ou sur la fenêtre enfant d’une fenêtre de premier niveau inactive, le système envoie le message WM_MOUSEACTIVATE (entre autres) à la fenêtre de premier niveau ou à la fenêtre enfant. Le système envoie ce message après avoir posté le message WM_NCHITTEST à la fenêtre, mais avant de poster le message d’appui sur le bouton. Lorsque WM_MOUSEACTIVATE est passé à la fonction DefWindowProc, le système active la fenêtre de premier niveau, puis poste le message d’appui sur le bouton à la fenêtre de premier niveau ou à la fenêtre enfant.
En traitant WM_MOUSEACTIVATE, une fenêtre peut contrôler si la fenêtre de premier niveau devient la fenêtre active à la suite d’un clic de souris, et si la fenêtre sur laquelle on a cliqué reçoit le message d’appui sur le bouton. Elle le fait en renvoyant l’une des valeurs suivantes après traitement du message WM_MOUSEACTIVATE.
Valeur | Signification |
---|---|
MA_ACTIVATE | Active la fenêtre et ne rejette pas le message de la souris. |
MA_NOACTIVATE | N’active pas la fenêtre et ne rejette pas le message de la souris. |
MA_ACTIVATEANDEAT | Active la fenêtre et rejette le message de la souris. |
MA_NOACTIVATEANDEAT | N’active pas la fenêtre mais rejette le message de la souris. |