Vue d’ensemble des entrées de souris

La souris est un appareil d’entrée utilisateur important, mais facultatif, pour les applications. Une application bien écrite doit inclure une interface souris, mais elle ne doit pas dépendre uniquement de la souris pour l’acquisition d’une entrée utilisateur. L’application doit également offrir une prise en charge complète du clavier.

Une application reçoit une entrée de la souris sous la forme de messages envoyés ou publiés dans ses fenêtres.

Cette section couvre les sujets suivants :

Curseur de la souris

Lorsque l’utilisateur déplace la souris, le système déplace une bitmap sur l’écran appelée curseur de la souris. Le curseur de la souris contient un point d’un seul pixel appelé zone réactive, point que le système suit et reconnaît comme position du curseur. Lorsqu’un événement de souris se produit, la fenêtre qui contient la zone réactive reçoit généralement le message de 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 souris.

Le système gère une variable qui contrôle la vitesse de la souris, c’est-à-dire la distance à laquelle le curseur se déplace 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 souris, consultez Curseurs.

Capture de la souris

Le système publie généralement un message de souris dans la fenêtre qui contient la zone réactive du curseur lorsqu’un événement de souris se produit. Une application peut modifier ce comportement à l’aide de 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 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 à la fenêtre qui obtient la capture de la souris.

Seule la fenêtre de premier plan peut capturer l’entrée de la souris. Lorsqu’une fenêtre d’arrière-plan tente de capturer l’entrée de la souris, elle reçoit uniquement des messages pour les événements de souris qui se produisent lorsque la zone réactive du curseur se trouve dans la partie visible de la fenêtre.

La capture d’entrée de souris est utile si une fenêtre doit recevoir toutes les entrées de la souris, même lorsque le curseur se déplace à l’extérieur de la fenêtre. Par exemple, une application suit généralement la position du curseur après un événement de bouton de la souris vers le bas, en suivant le curseur jusqu’à ce qu’un événement de bouton vers le haut se produise. Si une application n’a pas capturé l’entrée 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 bouton haut.

Un thread peut utiliser la fonction GetCapture pour déterminer si l’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 dans 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 simple clic. Pour une application, le bouton semble toujours être enfoncé. Pour déverrouiller le bouton, une application peut envoyer n’importe quel message de souris ou l’utilisateur peut cliquer sur n’importe quel bouton de la souris. Cette fonctionnalité permet à un utilisateur d’effectuer des combinaisons de souris complexes plus simplement. Par exemple, les personnes souffrants de certaines limitations physiques peuvent mettre en surbrillance du texte, faire glisser des objets ou ouvrir des menus plus facilement. Pour plus d’informations, consultez 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 périphérique d’entrée important pour les applications, tous les utilisateurs ne disposent pas nécessairement d’une souris. Une application peut déterminer si le système inclut une souris en transmettant 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, central et droit. Les messages et les constantes nommées liées aux boutons de la souris utilisent les lettres L, M et R pour identifier les boutons. Le bouton d’une souris à bouton unique est considéré comme le bouton gauche. Bien que Windows prenne en charge une souris avec plusieurs boutons, la plupart des applications utilisent principalement le bouton gauche et les autres au minimum, voire pas du tout.

Les applications peuvent également prendre en charge la roulette de la souris. La roulette de la souris peut être enfoncée ou pivotée. Lorsque la roulette de la souris est enfoncée, elle agit comme le (troisième) bouton central, envoyant des messages normaux sur le bouton central à votre application. Lorsqu’elle est pivotée, un message de roue est envoyé à votre application. Pour plus d’informations, consultez la section Roulette de la souris.

Les applications peuvent prendre en charge les boutons de commande d’application. Ces boutons, appelés boutons X, sont conçus pour faciliter l’accès à un navigateur Internet, au courrier électronique et aux services multimédias. Lorsque vous appuyez sur un bouton X, un message WM_APPCOMMAND est envoyé à votre application. Pour plus d’informations, consultez la description dans le message WM_APPCOMMAND.

Une application peut déterminer le nombre de boutons de la souris en transmettant 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. Le passage de la valeur SPI_SETMOUSEBUTTONSWAP à la fonction SystemParametersInfo est une autre façon d’inverser la signification des boutons. Notez toutefois que la souris est une ressource partagée, de sorte que l’inversion de la signification des boutons affecte toutes les applications.

XBUTTONs

Windows prend en charge une souris avec cinq boutons. En plus des boutons gauche, central et droit, il existe XBUTTON1 et XBUTTON2, qui fournissent une navigation vers l’arrière et vers l’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é enfoncé. Étant donné que ces messages de souris s’ajustent également entre les constantes WM_MOUSEFIRST et WM_MOUSELAST, une application peut filtrer tous les messages de souris avec GetMessage ou PeekMessage.

Les éléments suivants prennent en charge XBUTTON1 et XBUTTON2 :

Les API suivantes ont été modifiées pour prendre en charge ces boutons :

Il est peu probable qu’une fenêtre enfant d’une application de composant puisse implémenter directement des commandes pour XBUTTON1 et XBUTTON2. Par conséquent, DefWindowProc envoie un message WM_APPCOMMAND à une fenêtre lorsque l’utilisateur clique sur un bouton X. DefWindowProc envoie également le message WM_APPCOMMAND dans sa fenêtre parent. Cela est similaire à la façon dont les menus contextuels sont appelés avec le bouton droit : DefWindowProc envoie un message WM_CONTEXTMENU au menu et l’envoie également à son parent. En outre, si DefWindowProc reçoit un message WM_APPCOMMAND pour une fenêtre de niveau supérieur, il appelle un crochet d’interpréteur de commandes avec du code HSHELL_APPCOMMAND.

Les claviers dotés de touches supplémentaires pour les fonctions de navigateur, les fonctions multimédias, le lancement d’applications et la gestion de l’alimentation sont pris en charge. Pour plus d’informations, consultez Touches de clavier pour la navigation et autres fonctions.

Messages de la souris

La souris génère un événement d’entrée lorsque l’utilisateur déplace la souris, ou appuie ou relâche un bouton de la souris. Le système convertit les événements d’entrée de souris en messages et les publie dans la file d’attente de messages du thread approprié. Lorsque les messages de souris sont publiés plus rapidement qu’un thread ne peut les traiter, le système ignore tous les messages de souris sauf le plus récent.

Une fenêtre reçoit un message de souris lorsqu’un événement de souris se produit alors que le curseur se trouve dans les bordures de la fenêtre, ou lorsque la fenêtre a capturé la souris. Les messages de souris sont divisés en deux groupes : les messages de zone cliente et les messages de zone non cliente. En règle générale, une application traite les messages de zone cliente et ignore les messages de zone non cliente.

Cette section couvre les sujets suivants :

Messages de la souris de la zone cliente

Une fenêtre reçoit un message de souris de la zone cliente lorsqu’un événement de souris se produit dans la zone cliente de la fenêtre. Le système publie le message WM_MOUSEMOVE dans la fenêtre lorsque l’utilisateur déplace le curseur dans la zone cliente. Il publie l’un des messages suivants lorsque l’utilisateur appuie ou relâche un bouton de la souris alors que le curseur se trouve dans la zone cliente.

Message Signification
WM_LBUTTONDBLCLK Le bouton gauche de la souris a été double-cliqué.
WM_LBUTTONDOWN Le bouton gauche de la souris a été enfoncé.
WM_LBUTTONUP Le bouton gauche de la souris a été relâché.
WM_MBUTTONDBLCLK Le bouton central de la souris a été double-cliqué.
WM_MBUTTONDOWN Le bouton central de la souris a été enfoncé.
WM_MBUTTONUP Le bouton central 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é enfoncé.
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é enfoncé.
WM_XBUTTONUP Un bouton X de la souris a été relâché.

 

En outre, une application peut appeler la fonction TrackMouseEvent pour que le système envoie deux autres messages. Il publie le message WM_MOUSEHOVER lorsque le curseur pointe sur la zone cliente pendant une certaine période. Il publie le message WM_MOUSELEAVE lorsque le curseur quitte la zone cliente.

Paramètres des messages

Le paramètre lParam d’un message de souris de zone cliente indique la position de la zone réactive du curseur. Le mot d’ordre inférieur indique la coordonnée x de la zone réactive, et le mot d’ordre élevé indique la coordonnée y. Les coordonnées sont spécifiées dans les coordonnées du client. Dans le système de coordonnées du 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 cliente.

Le paramètre wParam contient des indicateurs qui indiquent l’état des autres boutons de la souris et les touches CTRL et MAJ au moment de l’événement de 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 MAJ. 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 successivement sur un bouton de la souris. Lorsque l’utilisateur clique sur un bouton, le système établit un rectangle centré autour de la zone réactive du curseur. Il marque également l’heure à laquelle le clic s’est produit. Lorsque l’utilisateur clique sur le même bouton une deuxième fois, le système détermine si la zone réactive se trouve toujours dans le rectangle et calcule le temps écoulé depuis le premier clic. Si le point d’accès se trouve toujours dans le rectangle et que le temps écoulé ne dépasse pas la valeur de 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 des valeurs de délai d’attente de double-clic à l’aide des fonctions GetDoubleClickTime et SetDoubleClickTime, respectivement. L’application peut également définir la valeur de délai d’attente de double-clic à l’aide de l’indicateur SPI_SETDOUBLECLICKTIME avec la fonction SystemParametersInfo. Il peut également définir la taille du rectangle que le système utilise pour détecter les double-clics en passant les indicateurs SPI_SETDOUBLECLKWIDTH et SPI_SETDOUBLECLKHEIGHT à SystemParametersInfo. Notez, toutefois, que la définition de la valeur et du rectangle de délai d’attente de double-clic affecte toutes les applications.

Par défaut, une fenêtre définie par l’application ne reçoit pas de messages de double-clic. En raison de la surcharge système impliquée dans la génération de messages de double-clic, ces messages sont générés uniquement 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’inscription de la classe window. Pour plus d’informations, consultez Classes Window.

Un message de double-clic est toujours le troisième message d’une série de quatre messages. Les deux premiers messages sont les messages de bouton vers le bas et de bouton vers le haut 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 bouton vers le haut. Par exemple, le double-clic sur le bouton gauche de la souris génère la séquence de messages suivante :

  1. WM_LBUTTONDOWN
  2. WM_LBUTTONUP
  3. WM_LBUTTONDBLCLK
  4. WM_LBUTTONUP

Étant donné qu’une fenêtre reçoit toujours un message de bouton vers le bas avant de recevoir un message de double-clic, une application utilise généralement un message de double-clic pour étendre une tâche qu’elle a commencée lors d’un message de bouton vers le bas. 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 de la zone non cliente

Une fenêtre reçoit un message de souris de zone non cliente lorsqu’un événement de souris se produit dans n’importe quelle partie d’une fenêtre, à l’exception de la zone cliente. La zone non cliente d’une fenêtre se compose de sa bordure, de sa barre de menus, de sa barre de titre, de sa barre de défilement, de son menu de fenêtre, de son bouton réduire et de son bouton agrandir.

Le système génère des messages de zone non cliente principalement pour sa propre utilisation. Par exemple, le système utilise des messages de zone non cliente pour remplacer le curseur par une flèche à deux têtes lorsque la zone réactive du curseur se déplace dans la bordure d’une fenêtre. Une fenêtre doit passer des messages de souris de zone non cliente à la fonction DefWindowProc pour tirer parti de l’interface de souris intégrée.

Il existe un message de souris de zone non cliente correspondant pour chaque message de souris de zone cliente. Les noms de ces messages sont similaires, sauf que les constantes nommées pour les messages de zone non cliente incluent les lettres NC. Par exemple, le déplacement du curseur dans la zone non cliente génère un message WM_NCMOUSEMOVE et le fait d’appuyer sur le bouton gauche de la souris alors que le curseur se trouve dans la zone non cliente génère un message WM_NCLBUTTONDOWN.

Le paramètre lParam d’un message de souris de zone non cliente est une structure qui contient les coordonnées x et y de la zone réactive du curseur. Contrairement aux coordonnées des messages de souris de la zone cliente, les coordonnées sont spécifiées dans les coordonnées d’écran plutôt que dans les coordonnées du 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 d’accès, une valeur qui indique où, dans la zone non cliente, l’événement de souris s’est produit. La section suivante explique l’objectif des valeurs de test d’accès.

Message WM_NCHITTEST

Chaque fois qu’un événement de souris se produit, le système envoie un message WM_NCHITTEST à la fenêtre qui contient la zone réactive du curseur ou à 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 de zone cliente ou non cliente. Une application qui doit recevoir des messages de déplacement de la souris et de bouton de la souris doit passer le message WM_NCHITTEST à la fonction DefWindowProc.

Le paramètre lParam du message WM_NCHITTEST contient les coordonnées d’écran de la zone réactive du curseur. La fonction DefWindowProc examine les coordonnées et retourne une valeur de test d’accès qui indique l’emplacement de la zone réactive. La valeur de test de succès peut être l’une des valeurs suivantes.

Valeur Emplacement de la zone réactive
HTBORDER Dans la bordure d’une fenêtre qui n’a pas de bordure de dimensionnement.
HTBOTTOM Dans la bordure inférieure horizontale 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 des fenêtres (identique à 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 System ou dans un bouton Fermer dans 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 du même thread.
HTVSCROLL Dans la barre de défilement vertical.
HTZOOM Dans un bouton Agrandir.

 

Si le curseur se trouve dans la zone cliente d’une fenêtre, DefWindowProc retourne la valeur de test d’accès HTCLIENT à la procédure de fenêtre. Lorsque la procédure de fenêtre retourne ce code au système, le système convertit les coordonnées d’écran de la zone réactive du curseur en coordonnées clientes, puis publie le message de souris de la zone cliente appropriée.

La fonction DefWindowProc retourne l’une des autres valeurs de test d’accès lorsque la zone réactive du curseur se trouve dans la zone non cliente d’une fenêtre. Lorsque la procédure de fenêtre retourne l’une de ces valeurs de test d’accès, le système publie un message de souris de zone non cliente, en plaçant la valeur de test d’accès 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 montre brièvement plusieurs cercles concentriques autour du pointeur lorsque l’utilisateur appuie et relâche la touche CTRL. Cette fonctionnalité permet à un utilisateur de localiser le pointeur de la souris sur un écran encombré ou dont la résolution est définie sur élevée, sur un moniteur de mauvaise qualité ou pour les utilisateurs malvoyants. Pour plus d’informations, consultez les indicateurs suivants dans SystemParametersInfo :

SPI_GETMOUSESONAR

SPI_SETMOUSESONAR

Mouse Vanish

La fonctionnalité d’accessibilité Mouse Vanish masque 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 de masquer le texte tapé, par exemple, dans un e-mail ou un autre document. Pour plus d’informations, consultez les indicateurs suivants dans SystemParametersInfo :

SPI_GETMOUSEVANISH

SPI_SETMOUSEVANISH

Roulette de la souris

La roulette de la souris combine les caractéristiques d’une roulette et d’un bouton de souris. La roulette a des encoches discrètes et uniformément espacées. Lorsque vous faites pivoter la roulette, un message de roulette est envoyé à votre application à chaque encoche rencontrée. Le bouton de roulette peut également fonctionner comme un (troisième) bouton central normal de Windows. Appuyer et relâcher la roulette de la souris envoie des messages WM_MBUTTONUP et WM_MBUTTONDOWN standard. Le double-clic sur le troisième bouton envoie le message WM_MBUTTONDBLCLK standard.

La roulette de la souris est prise en charge via le message WM_MOUSEWHEEL.

La rotation de la souris envoie le message WM_MOUSEWHEEL à la fenêtre de focus. La fonction DefWindowProc propage le message au parent de la fenêtre. Il ne doit pas y avoir de transfert interne du message, car DefWindowProc le propage dans la chaîne parente jusqu’à ce qu’une fenêtre qui le traite soit trouvée.

Détermination du nombre de lignes de défilement

Les applications doivent utiliser la fonction SystemParametersInfo pour récupérer le nombre de lignes qu’un document fait défiler pour chaque opération de défilement (encoche de roulette). Pour récupérer le nombre de lignes, une application effectue 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 roulette de la souris est pivotée sans touches de modification :

  • Si ce nombre est 0, aucun défilement ne doit se produire.
  • Si ce nombre est WHEEL_PAGESCROLL, un rouleau de roulette doit être interprété comme un clic dans les régions de la page vers le bas ou vers le haut 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 vers le bas ou de page vers le haut.

La valeur par défaut du nombre de lignes de défilement est 3. Si un utilisateur modifie le nombre de lignes de défilement, à l’aide de la feuille Propriétés de la souris dans Panneau de configuration, le système d’exploitation diffuse un message WM_SETTINGCHANGE dans toutes les fenêtres de niveau supérieur avec SPI_SETWHEELSCROLLLINES spécifié. Lorsqu’une application reçoit le message WM_SETTINGCHANGE, elle peut alors obtenir le nouveau nombre de lignes de défilement en appelant :

SystemParametersInfo(SPI_GETWHEELSCROLLLINES, 0, pulScrollLines, 0)

Contrôles qui font défiler

Le tableau ci-dessous répertorie les contrôles avec une fonctionnalité de défilement (y compris les lignes de défilement définies par l’utilisateur).

Control Défilement
Contrôle Edit Vertical et horizontal.
Contrôle List Box Vertical et horizontal.
Combo box Lorsqu’il n’est pas supprimé, chaque défilement récupère l’élément suivant ou précédent. Lorsqu’il est déposé, chaque défilement transfère le message à la zone de liste, qui fait défiler en conséquence.
CMD (ligne de commande) Vertical.
Arborescence Vertical et horizontal.
Mode Liste Vertical et horizontal.
Défilements haut/bas Un élément à la fois.
Défilements Trackbar Un élément à la fois.
Microsoft Rich Edit 1.0 Vertical. Notez que le client Exchange a ses propres versions des contrôles d’affichage de liste et d’arborescence qui ne prennent pas en charge la roulette.
Microsoft Rich Edit 2.0 Vertical.

 

Détection d’une souris avec une roulette

Pour déterminer si une souris avec une roulette est connectée, appelez GetSystemMetrics avec SM_MOUSEWHEELPRESENT. La valeur de retour TRUE indique que la souris est connectée.

L’exemple suivant provient de la procédure de 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 niveau supérieur inactive ou sur la fenêtre enfant d’une fenêtre de niveau supérieur inactive, le système envoie le message WM_MOUSEACTIVATE (entre autres) à la fenêtre enfant ou de niveau supérieur. Le système envoie ce message après avoir publié le message WM_NCHITTEST dans la fenêtre, mais avant de publier le message de bouton vers le bas. Lorsque WM_MOUSEACTIVATE est passé à la fonction DefWindowProc, le système active la fenêtre de niveau supérieur, puis publie le message de bouton vers le bas dans la fenêtre enfant ou de niveau supérieur.

En traitant WM_MOUSEACTIVATE, une fenêtre peut contrôler si la fenêtre de niveau supérieur devient la fenêtre active à la suite d’un clic de souris, et si la fenêtre sur laquelle vous avez cliqué reçoit le message de bouton vers le bas suivant. Pour ce faire, il retourne l’une des valeurs suivantes après le traitement WM_MOUSEACTIVATE.

Valeur Signification
MA_ACTIVATE Active la fenêtre et n’ignore pas le message de la souris.
MA_NOACTIVATE N’active pas la fenêtre et n’ignore pas le message de la souris.
MA_ACTIVATEANDEAT Active la fenêtre et ignore le message de la souris.
MA_NOACTIVATEANDEAT N’active pas la fenêtre, mais ignore le message de la souris.

Voir aussi

Tirer parti du mouvement de la souris en haute définition