Structure RAWMOUSE (winuser.h)
Contient des informations sur l’état de la souris.
Syntaxe
typedef struct tagRAWMOUSE {
USHORT usFlags;
union {
ULONG ulButtons;
struct {
USHORT usButtonFlags;
USHORT usButtonData;
} DUMMYSTRUCTNAME;
} DUMMYUNIONNAME;
ULONG ulRawButtons;
LONG lLastX;
LONG lLastY;
ULONG ulExtraInformation;
} RAWMOUSE, *PRAWMOUSE, *LPRAWMOUSE;
Membres
usFlags
Type : USHORT
État de la souris. Ce membre peut être une combinaison raisonnable des éléments suivants.
Valeur | Signification |
---|---|
MOUSE_MOVE_RELATIVE0x00 |
Les données de déplacement de la souris sont relatives à la dernière position de la souris. Pour plus d’informations sur le mouvement de la souris, consultez la section Remarques suivante. |
MOUSE_MOVE_ABSOLUTE0x01 |
Les données de déplacement de la souris sont basées sur la position absolue. Pour plus d’informations sur le mouvement de la souris, consultez la section Remarques suivante. |
MOUSE_VIRTUAL_DESKTOP0x02 |
Les coordonnées de la souris sont mappées au bureau virtuel (pour un système à plusieurs moniteurs). Pour plus d’informations sur le mouvement de la souris, consultez la section Remarques suivante. |
MOUSE_ATTRIBUTES_CHANGED0x04 |
Les attributs de la souris ont été modifiés ; l’application doit interroger les attributs de la souris. |
MOUSE_MOVE_NOCOALESCE0x08 |
Cet événement de déplacement de souris n’a pas été coalisé. Les événements de déplacement de souris peuvent être coalés par défaut. Windows XP/2000 : cette valeur n’est pas prise en charge. |
DUMMYUNIONNAME
DUMMYUNIONNAME.ulButtons
Type : ULONG
Réservé.
DUMMYUNIONNAME.DUMMYSTRUCTNAME
DUMMYUNIONNAME.DUMMYSTRUCTNAME.usButtonFlags
Type : USHORT
État de transition des boutons de la souris. Ce membre peut être une ou plusieurs des valeurs suivantes.
Valeur | Signification |
---|---|
RI_MOUSE_BUTTON_1_DOWN RI_MOUSE_LEFT_BUTTON_DOWN0x0001 |
Le bouton gauche est passé à bas. |
RI_MOUSE_BUTTON_1_UP RI_MOUSE_LEFT_BUTTON_UP0x0002 |
Le bouton gauche est passé à haut. |
RI_MOUSE_BUTTON_2_DOWN RI_MOUSE_RIGHT_BUTTON_DOWN0x0004 |
Le bouton droit est passé à bas. |
RI_MOUSE_BUTTON_2_UP RI_MOUSE_RIGHT_BUTTON_UP0x0008 |
Le bouton droit est passé à haut. |
RI_MOUSE_BUTTON_3_DOWN RI_MOUSE_MIDDLE_BUTTON_DOWN0x0010 |
Le bouton central est passé à bas. |
RI_MOUSE_BUTTON_3_UP RI_MOUSE_MIDDLE_BUTTON_UP0x0020 |
Le bouton central a été remplacé par haut. |
RI_MOUSE_BUTTON_4_DOWN0x0040 |
XBUTTON1 bas. |
RI_MOUSE_BUTTON_4_UP0x0080 |
XBUTTON1 remplacé par up. |
RI_MOUSE_BUTTON_5_DOWN0x0100 |
XBUTTON2 bas. |
RI_MOUSE_BUTTON_5_UP0x0200 |
XBUTTON2 remplacé par up. |
RI_MOUSE_WHEEL0x0400 |
L’entrée brute provient d’une roulette de souris. Le delta de roue est stocké dans usButtonData. Une valeur positive indique que la roue a été actionnée vers l’avant, face à l’utilisateur ; une valeur négative indique que la roue a été actionnée vers l’arrière, en direction de l’utilisateur. Pour plus d’informations, consultez la section Remarques suivante. |
RI_MOUSE_HWHEEL0x0800 |
L’entrée brute provient d’une roulette de souris horizontale. Le delta de roue est stocké dans usButtonData. Une valeur positive indique une rotation de la molette vers la droite ; une valeur négative indique une rotation de la molette vers la gauche. Pour plus d’informations, consultez la section Remarques suivante. Windows XP/2000 : cette valeur n’est pas prise en charge. |
DUMMYUNIONNAME.DUMMYSTRUCTNAME.usButtonData
Type : USHORT
Si usButtonFlags a RI_MOUSE_WHEEL ou RI_MOUSE_HWHEEL, ce membre spécifie la distance à laquelle la roue est pivotée. Pour plus d’informations, consultez la section Remarques suivante.
ulRawButtons
Type : ULONG
État brut des boutons de la souris. Le sous-système Win32 n’utilise pas ce membre.
lLastX
Type : LONG
Mouvement dans la direction X. Il s’agit d’un mouvement relatif signé ou d’un mouvement absolu, selon la valeur de usFlags.
lLastY
Type : LONG
Mouvement dans la direction Y. Il s’agit d’un mouvement relatif signé ou d’un mouvement absolu, selon la valeur de usFlags.
ulExtraInformation
Type : ULONG
Informations supplémentaires spécifiques à l’appareil pour l’événement.
Remarques
Si la souris a été déplacée, indiquée par MOUSE_MOVE_RELATIVE ou MOUSE_MOVE_ABSOLUTE, lLastX et lLastY spécifient des informations sur ce mouvement. Les informations sont spécifiées sous forme de valeurs entières relatives ou absolues.
Si MOUSE_MOVE_RELATIVE valeur est spécifiée, lLastX et lLastY spécifient le mouvement par rapport à l’événement de souris précédent (dernière position signalée). Les valeurs positives signifient que la souris a été déplacée vers la droite (ou vers le bas) ; les valeurs négatives signifient que la souris a été déplacée vers la gauche (ou vers le haut).
Si MOUSE_MOVE_ABSOLUTE valeur est spécifiée, lLastX et lLastY contiennent des coordonnées absolues normalisées comprises entre 0 et 65 535. Coordonnées (0,0) sur le coin supérieur gauche de la surface d’affichage ; coordonnée (65535,65535) correspond au coin inférieur droit. Dans un système multimonitor, les coordonnées sont mappées au moniteur principal.
Si MOUSE_VIRTUAL_DESKTOP est spécifié en plus de MOUSE_MOVE_ABSOLUTE, les coordonnées sont mappées à l’ensemble du bureau virtuel.
case WM_INPUT:
{
UINT dwSize = sizeof(RAWINPUT);
static BYTE lpb[sizeof(RAWINPUT)];
GetRawInputData((HRAWINPUT)lParam, RID_INPUT, lpb, &dwSize, sizeof(RAWINPUTHEADER));
RAWINPUT* raw = (RAWINPUT*)lpb;
if (raw->header.dwType == RIM_TYPEMOUSE)
{
RAWMOUSE& mouse = raw->data.mouse;
if (mouse.usFlags & MOUSE_MOVE_ABSOLUTE)
{
RECT rect;
if (mouse.usFlags & MOUSE_VIRTUAL_DESKTOP)
{
rect.left = GetSystemMetrics(SM_XVIRTUALSCREEN);
rect.top = GetSystemMetrics(SM_YVIRTUALSCREEN);
rect.right = GetSystemMetrics(SM_CXVIRTUALSCREEN);
rect.bottom = GetSystemMetrics(SM_CYVIRTUALSCREEN);
}
else
{
rect.left = 0;
rect.top = 0;
rect.right = GetSystemMetrics(SM_CXSCREEN);
rect.bottom = GetSystemMetrics(SM_CYSCREEN);
}
int absoluteX = MulDiv(mouse.lLastX, rect.right, USHRT_MAX) + rect.left;
int absoluteY = MulDiv(mouse.lLastY, rect.bottom, USHRT_MAX) + rect.top;
...
}
else if (mouse.lLastX != 0 || mouse.lLastY != 0)
{
int relativeX = mouse.lLastX;
int relativeY = mouse.lLastY;
...
}
...
}
return 0;
}
Contrairement aux messages hérités WM_MOUSEMOVE fenêtre, les événements de souris Entrée brute ne sont pas soumis aux effets du paramètre de vitesse de la souris défini dans la feuille Propriétés de la souris du Panneau de configuration. Pour plus d’informations, consultez Vue d’ensemble des entrées de souris .
Si la roulette de la souris est déplacée, indiquée par RI_MOUSE_WHEEL ou RI_MOUSE_HWHEEL dans usButtonFlags, usButtonData contient une valeur courte signée qui spécifie la distance à laquelle la roue est pivotée.
La rotation de la roulette sera un multiple de WHEEL_DELTA, défini à 120. Il s’agit du seuil de déclenchement de l’action, et une action de ce type (par exemple, le défilement d’un incrément) doit se produire pour chaque delta.
Le delta a été défini sur 120 pour permettre à Microsoft ou à d’autres fournisseurs de créer des roulettes à résolution plus élevée (une roulette à rotation libre sans encoche) pour envoyer plus de messages par rotation, mais avec une valeur plus petite dans chaque message. Pour utiliser cette fonctionnalité, vous pouvez ajouter les valeurs delta entrantes jusqu’à atteindre la valeur WHEEL_DELTA (ainsi, pour une rotation delta, vous obtenez la même réponse), ou faire défiler des lignes partielles en réponse aux messages plus fréquents. Vous pouvez également choisir votre granularité de défilement et accumuler des deltas jusqu’à atteinte la valeur souhaitée.
L’application peut également récupérer le paramètre utilisateur lignes-to-scroll et caractères-to-scroll actuel à l’aide de l’API SystemParametersInfo avec SPI_GETWHEELSCROLLLINES ou SPI_GETWHEELSCROLLCHARS paramètre.
Voici un exemple de code de gestion de roue de ce type :
RAWMOUSE& mouse = raw->data.mouse;
if ((mouse.usButtonFlags & RI_MOUSE_WHEEL) || (mouse.usButtonFlags & RI_MOUSE_HWHEEL))
{
short wheelDelta = (short)mouse.usButtonData;
float scrollDelta = (float)wheelDelta / WHEEL_DELTA;
if (mouse.usButtonFlags & RI_MOUSE_HWHEEL) // Horizontal
{
unsigned long scrollChars = 1; // 1 is the default
SystemParametersInfo(SPI_GETWHEELSCROLLCHARS, 0, &scrollChars, 0);
scrollDelta *= scrollChars;
...
}
else // Vertical
{
unsigned long scrollLines = 3; // 3 is the default
SystemParametersInfo(SPI_GETWHEELSCROLLLINES, 0, &scrollLines, 0);
if (scrollLines != WHEEL_PAGESCROLL)
scrollDelta *= scrollLines;
...
}
}
Configuration requise
Condition requise | Valeur |
---|---|
Client minimal pris en charge | Windows XP [applications de bureau uniquement] |
Serveur minimal pris en charge | Windows Server 2003 [applications de bureau uniquement] |
En-tête | winuser.h (inclure Windows.h) |
Voir aussi
Conceptuel
Référence
Vue d’ensemble des entrées de souris (héritée)
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour