RAWMOUSE-Struktur (winuser.h)
Enthält Informationen zum Zustand der Maus.
Syntax
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;
Angehörige
usFlags
Typ: USHORT-
Der Mauszustand. Dieses Mitglied kann eine beliebige vernünftige Kombination der folgenden Sein.
Wert | Bedeutung |
---|---|
MOUSE_MOVE_RELATIVE 0x00 |
Mausbewegungsdaten sind relativ zur letzten Mausposition. Weitere Informationen zur Mausbewegung finden Sie im folgenden Abschnitt "Hinweise". |
MOUSE_MOVE_ABSOLUTE 0x01 |
Mausbewegungsdaten basieren auf absoluter Position. Weitere Informationen zur Mausbewegung finden Sie im folgenden Abschnitt "Hinweise". |
MOUSE_VIRTUAL_DESKTOP 0x02 |
Mauskoordinaten werden dem virtuellen Desktop zugeordnet (für ein System mit mehreren Monitoren). Weitere Informationen zur Mausbewegung finden Sie im folgenden Abschnitt "Hinweise". |
MOUSE_ATTRIBUTES_CHANGED 0x04 |
Mausattribute geändert; die Anwendung muss die Mausattribute abfragen. |
MOUSE_MOVE_NOCOALESCE 0x08 |
Dieses Mausbewegungsereignis wurde nicht zusammengeklammert. Mausbewegungsereignisse können standardmäßig zusammengeklammert werden. Windows XP/2000: Dieser Wert wird nicht unterstützt. |
DUMMYUNIONNAME
DUMMYUNIONNAME.ulButtons
Typ: ULONG-
Reserviert.
DUMMYUNIONNAME.DUMMYSTRUCTNAME
DUMMYUNIONNAME.DUMMYSTRUCTNAME.usButtonFlags
Typ: USHORT-
Der Übergangszustand der Maustasten. Bei diesem Element kann es sich um einen oder mehrere der folgenden Werte handeln.
Wert | Bedeutung |
---|---|
RI_MOUSE_BUTTON_1_DOWN RI_MOUSE_LEFT_BUTTON_DOWN 0x0001 |
Die linke Schaltfläche wurde nach unten geändert. |
RI_MOUSE_BUTTON_1_UP RI_MOUSE_LEFT_BUTTON_UP 0x0002 |
Die linke Schaltfläche wurde in "Oben" geändert. |
RI_MOUSE_BUTTON_2_DOWN RI_MOUSE_RIGHT_BUTTON_DOWN 0x0004 |
Die rechte Schaltfläche wurde nach unten geändert. |
RI_MOUSE_BUTTON_2_UP RI_MOUSE_RIGHT_BUTTON_UP 0x0008 |
Die rechte Schaltfläche wurde in "Oben" geändert. |
RI_MOUSE_BUTTON_3_DOWN RI_MOUSE_MIDDLE_BUTTON_DOWN 0x0010 |
Die mittlere Schaltfläche wurde nach unten geändert. |
RI_MOUSE_BUTTON_3_UP RI_MOUSE_MIDDLE_BUTTON_UP 0x0020 |
Die mittlere Schaltfläche wurde in "Oben" geändert. |
RI_MOUSE_BUTTON_4_DOWN 0x0040 |
XBUTTON1 in "Nach unten" geändert. |
RI_MOUSE_BUTTON_4_UP 0x0080 |
XBUTTON1 in "Up" geändert. |
RI_MOUSE_BUTTON_5_DOWN 0x0100 |
XBUTTON2 in "Nach unten" geändert. |
RI_MOUSE_BUTTON_5_UP 0x0200 |
XBUTTON2 in "Up" geändert. |
RI_MOUSE_WHEEL 0x0400 |
Unformatierte Eingaben stammen aus einem Mausrad. Das Raddelta wird in usButtonDatagespeichert. Ein positiver Wert gibt an, dass das Rad vorwärts gedreht wurde, weg vom Benutzer; Ein negativer Wert gibt an, dass das Rad rückwärts in Richtung des Benutzers gedreht wurde. Weitere Informationen finden Sie im folgenden Abschnitt "Hinweise". |
RI_MOUSE_HWHEEL 0x0800 |
Unformatierte Eingaben stammen aus einem horizontalen Mausrad. Das Raddelta wird in usButtonDatagespeichert. Ein positiver Wert gibt an, dass das Rad nach rechts gedreht wurde; Ein negativer Wert gibt an, dass das Rad nach links gedreht wurde. Weitere Informationen finden Sie im folgenden Abschnitt "Hinweise". Windows XP/2000: Dieser Wert wird nicht unterstützt. |
DUMMYUNIONNAME.DUMMYSTRUCTNAME.usButtonData
Typ: USHORT-
Wenn usButtonFlagsRI_MOUSE_WHEEL oder RI_MOUSE_HWHEELhat, gibt dieses Element den Abstand an, in dem das Rad gedreht wird. Weitere Informationen finden Sie im folgenden Abschnitt "Hinweise".
ulRawButtons
Typ: ULONG-
Der unformatierte Zustand der Maustasten. Das Win32-Subsystem verwendet dieses Element nicht.
lLastX
Typ: LONG
Die Bewegung in der X-Richtung. Dies ist abhängig vom Wert von usFlagssignierte relative Bewegung oder absolute Bewegung.
lLastY
Typ: LONG
Die Bewegung in Y-Richtung. Dies ist abhängig vom Wert von usFlagssignierte relative Bewegung oder absolute Bewegung.
ulExtraInformation
Typ: ULONG-
Zusätzliche gerätespezifische Informationen für das Ereignis. Weitere Informationen finden Sie unter Unterscheidung der Stifteingabe von Maus- und Toucheingabe-.
Bemerkungen
Wenn sich die Maus bewegt hat, angegeben durch MOUSE_MOVE_RELATIVE oder MOUSE_MOVE_ABSOLUTE, lLastX und lLastY Informationen zu dieser Bewegung angeben. Die Informationen werden als relative oder absolute ganzzahlige Werte angegeben.
Wenn MOUSE_MOVE_RELATIVE Wert angegeben ist, lLastX und lLastY Die Bewegung relativ zum vorherigen Mausereignis (die zuletzt gemeldete Position) angeben. Positive Werte bedeuten, dass die Maus nach rechts (oder nach unten) verschoben wird. negative Werte bedeuten, dass die Maus nach links verschoben (oder nach oben) verschoben wird.
Wenn MOUSE_MOVE_ABSOLUTE Wert angegeben ist, enthalten lLastX- und lLastY normalisierte absolute Koordinaten zwischen 0 und 65.535. Die Koordinate (0,0) wird der oberen linken Ecke der Anzeigeoberfläche zugeordnet. die Koordinate (65535.65535) der unteren rechten Ecke zugeordnet ist. In einem Multimonitorsystem werden die Koordinaten dem primären Monitor zugeordnet.
Wenn MOUSE_VIRTUAL_DESKTOP zusätzlich zu MOUSE_MOVE_ABSOLUTEangegeben wird, werden die Koordinaten dem gesamten virtuellen Desktop zugeordnet.
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;
}
Im Gegensatz zu älteren WM_MOUSEMOVE Fenstermeldungen, die unformatierte Eingabe-Mausereignisse aufweisen, unterliegen nicht den Auswirkungen der mausgeschwindigkeit, die im Mauseigenschaften- Blatt der Systemsteuerung festgelegt ist. Ausführliche Informationen finden Sie unter Übersicht über mauseingaben.
Wenn mausrad verschoben wird, durch RI_MOUSE_WHEEL oder RI_MOUSE_HWHEEL in usButtonFlagsangegeben, enthält usButtonData einen signierten kurzen Wert, der den Abstand angibt, der das Rad gedreht wird.
Die Raddrehung ist ein Vielfaches von WHEEL_DELTA, das auf 120 festgelegt ist. Dies ist der Schwellenwert für die auszuführende Aktion, und eine solche Aktion (z. B. das Scrollen eines Inkrements) sollte für jedes Delta auftreten.
Das Delta wurde auf 120 festgelegt, damit Microsoft oder andere Anbieter feiner auflösende Räder (ein frei drehendes Rad ohne Noten) erstellen können, um mehr Nachrichten pro Drehung zu senden, aber mit einem kleineren Wert in jeder Nachricht. Um dieses Feature zu verwenden, können Sie entweder die eingehenden Delta-Werte hinzufügen, bis WHEEL_DELTA erreicht ist (also für eine Delta-Drehung, die Sie dieselbe Antwort erhalten), oder Teilzeilen als Reaktion auf die häufigeren Nachrichten scrollen. Sie können auch die Granularität des Bildlaufs auswählen und Deltas ansammeln, bis sie erreicht ist.
Die Anwendung kann auch die aktuellen Zeilen-zu-Bildlauf- und Zeichen-zum-Bildlauf-Benutzereinstellung abrufen, indem sie die SystemParametersInfo-API mit SPI_GETWHEELSCROLLLINES oder SPI_GETWHEELSCROLLCHARS Parameter verwenden.
Hier ist ein Beispiel für einen solchen Radbehandlungscode:
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;
...
}
}
Anforderungen
Anforderung | Wert |
---|---|
mindestens unterstützte Client- | Windows XP [nur Desktop-Apps] |
mindestens unterstützte Server- | Windows Server 2003 [Nur Desktop-Apps] |
Header- | winuser.h (enthalten Windows.h) |
Siehe auch
Konzeptionelle
Referenz-