RAWMOUSE, structure (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_RELATIVE 0x00 |
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_ABSOLUTE 0x01 |
Les données de déplacement de la souris sont basées sur une position absolue. Pour plus d’informations sur le mouvement de la souris, consultez la section Remarques suivante. |
MOUSE_VIRTUAL_DESKTOP 0x02 |
Les coordonnées de la souris sont mappées au bureau virtuel (pour un système de surveillance multiple). Pour plus d’informations sur le mouvement de la souris, consultez la section Remarques suivante. |
MOUSE_ATTRIBUTES_CHANGED 0x04 |
Attributs de la souris modifiés ; l’application doit interroger les attributs de la souris. |
MOUSE_MOVE_NOCOALESCE 0x08 |
Cet événement de mouvement de souris n’a pas été coalesced. Les événements de déplacement de la souris peuvent être coalescé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_DOWN 0x0001 |
Bouton gauche modifié vers le bas. |
RI_MOUSE_BUTTON_1_UP RI_MOUSE_LEFT_BUTTON_UP 0x0002 |
Bouton gauche modifié vers le haut. |
RI_MOUSE_BUTTON_2_DOWN RI_MOUSE_RIGHT_BUTTON_DOWN 0x0004 |
Bouton droit modifié vers le bas. |
RI_MOUSE_BUTTON_2_UP RI_MOUSE_RIGHT_BUTTON_UP 0x0008 |
Bouton droit modifié vers le haut. |
RI_MOUSE_BUTTON_3_DOWN RI_MOUSE_MIDDLE_BUTTON_DOWN 0x0010 |
Bouton central modifié vers le bas. |
RI_MOUSE_BUTTON_3_UP RI_MOUSE_MIDDLE_BUTTON_UP 0x0020 |
Bouton central modifié vers le haut. |
RI_MOUSE_BUTTON_4_DOWN 0x0040 |
XBUTTON1 changé vers le bas. |
RI_MOUSE_BUTTON_4_UP 0x0080 |
XBUTTON1 changé vers le haut. |
RI_MOUSE_BUTTON_5_DOWN 0x0100 |
XBUTTON2 changé vers le bas. |
RI_MOUSE_BUTTON_5_UP 0x0200 |
XBUTTON2 changé vers le haut. |
RI_MOUSE_WHEEL 0x0400 |
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é pivotée vers l’avant, loin de l’utilisateur ; une valeur négative indique que la roue a été pivotée vers l’arrière vers l’utilisateur. Pour plus d’informations, consultez la section Remarques suivante. |
RI_MOUSE_HWHEEL 0x0800 |
L’entrée brute provient d’une roulette de souris horizontale. Le delta de roue est stocké dans usButtonData. Une valeur positive indique que la roue a été pivotée vers la droite ; une valeur négative indique que la roue a été pivotée 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. Pour plus d’informations, consultez distinction entre l’entrée de stylet et la souris et le tactile.
Remarques
Si la souris a été déplacée, indiquée par MOUSE_MOVE_RELATIVE ou MOUSE_MOVE_ABSOLUTE, lLastX et lLastY spécifier des informations sur ce mouvement. Les informations sont spécifiées en tant que valeurs entières relatives ou absolues.
Si MOUSE_MOVE_RELATIVE valeur est spécifiée, lLastX et lLastY spécifier 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 est 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. Les coordonnées (0,0) sont mappée sur le coin supérieur gauche de l’aire d’affichage ; coordonnée (65535 65535) mappe sur le 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 correspondent à l’intégralité 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 de fenêtre WM_MOUSEMOVE hérités, les événements de souris entrée brute ne sont pas soumis aux effets de la vitesse de la souris définie dans la feuille Propriétés de la souris du Panneau de configuration. Pour plus d’informations, consultez Vue d’ensemble de l’entrée de la souris.
Si la roulette de la souris est déplacée, indiquée par
La rotation des roues sera un multiple de WHEEL_DELTA, qui est définie à 120. Il s’agit du seuil d’action à entreprendre, et une telle action (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 roues de résolution plus fines (roue librement pivotante sans pouces) pour envoyer plus de messages par rotation, mais avec une plus petite valeur dans chaque message. Pour utiliser cette fonctionnalité, vous pouvez ajouter les valeurs delta entrantes jusqu’à ce que WHEEL_DELTA soit atteinte (par conséquent, pour une rotation delta, vous obtenez la même réponse), ou faire défiler les lignes partielles en réponse aux messages les plus fréquents. Vous pouvez également choisir votre granularité de défilement et accumuler des deltas jusqu’à ce qu’elle soit atteinte.
L’application peut également récupérer le paramètre utilisateur lignes à défilement et caractères à défilement actuel à l’aide de l’API SystemParametersInfo avec SPI_GETWHEELSCROLLLINES ou SPI_GETWHEELSCROLLCHARS paramètre.
Voici un exemple de ce code de gestion des roues :
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;
...
}
}
Exigences
Exigence | Valeur |
---|---|
client minimum pris en charge | Windows XP [applications de bureau uniquement] |
serveur minimum pris en charge | Windows Server 2003 [applications de bureau uniquement] |
d’en-tête | winuser.h (include Windows.h) |
Voir aussi
conceptuelle
de référence
Vue d’ensemble de l’entrée de la souris (héritée)