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;
Member
usFlags
Typ: USHORT
Der Mauszustand. Bei diesem Member kann es sich um eine beliebige sinnvolle Kombination der folgenden Elemente handelt.
Wert | Bedeutung |
---|---|
MOUSE_MOVE_RELATIVE0x00 |
Mausbewegungsdaten sind relativ zur letzten Mausposition. Weitere Informationen zur Mausbewegung finden Sie im folgenden Abschnitt hinweise. |
MOUSE_MOVE_ABSOLUTE0x01 |
Mausbewegungsdaten basieren auf der absoluten Position. Weitere Informationen zur Mausbewegung finden Sie im folgenden Abschnitt hinweise. |
MOUSE_VIRTUAL_DESKTOP0x02 |
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_CHANGED0x04 |
Mausattribute geändert; die -Anwendung muss die Mausattribute abfragen. |
MOUSE_MOVE_NOCOALESCE0x08 |
Dieses Mausbewegungsereignis wurde nicht vereint. Mausbewegungsereignisse können standardmäßig zusammengezeigt 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 Member kann es sich um einen oder mehrere der folgenden Werte handeln.
Wert | Bedeutung |
---|---|
RI_MOUSE_BUTTON_1_DOWN RI_MOUSE_LEFT_BUTTON_DOWN0x0001 |
Die linke Schaltfläche wurde in nach unten geändert. |
RI_MOUSE_BUTTON_1_UP RI_MOUSE_LEFT_BUTTON_UP0x0002 |
Die linke Schaltfläche wurde in "Up" geändert. |
RI_MOUSE_BUTTON_2_DOWN RI_MOUSE_RIGHT_BUTTON_DOWN0x0004 |
Die rechte Schaltfläche wurde in nach unten geändert. |
RI_MOUSE_BUTTON_2_UP RI_MOUSE_RIGHT_BUTTON_UP0x0008 |
Die rechte Schaltfläche wurde in "Up" geändert. |
RI_MOUSE_BUTTON_3_DOWN RI_MOUSE_MIDDLE_BUTTON_DOWN0x0010 |
Die mittlere Schaltfläche wurde in "down" geändert. |
RI_MOUSE_BUTTON_3_UP RI_MOUSE_MIDDLE_BUTTON_UP0x0020 |
Die mittlere Schaltfläche wurde in "Up" geändert. |
RI_MOUSE_BUTTON_4_DOWN0x0040 |
XBUTTON1 in down geändert. |
RI_MOUSE_BUTTON_4_UP0x0080 |
XBUTTON1 in up geändert. |
RI_MOUSE_BUTTON_5_DOWN0x0100 |
XBUTTON2 in down geändert. |
RI_MOUSE_BUTTON_5_UP0x0200 |
XBUTTON2 in up geändert. |
RI_MOUSE_WHEEL0x0400 |
Unformatierte Eingaben stammen von einem Mausrad. Das Raddelta wird in usButtonData gespeichert. Ein positiver Wert bedeutet, dass das Rad von dem*der Benutzer*in weg vorwärts gedreht wurde, ein negativer Wert bedeutet, dass das Rad zu dem*der Benutzer*in hin rückwärts gedreht wurde. Weitere Informationen finden Sie im abschnitt "Hinweise". |
RI_MOUSE_HWHEEL0x0800 |
Unformatierte Eingaben stammen von einem horizontalen Mausrad. Das Raddelta wird in usButtonData gespeichert. 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 abschnitt "Hinweise". Windows XP/2000: Dieser Wert wird nicht unterstützt. |
DUMMYUNIONNAME.DUMMYSTRUCTNAME.usButtonData
Typ: USHORT
Wenn usButtonFlagsüber RI_MOUSE_WHEEL oder RI_MOUSE_HWHEEL verfügt, gibt dieser Member die Entfernung an, die das Rad gedreht wird. Weitere Informationen finden Sie im abschnitt "Hinweise".
ulRawButtons
Typ: ULONG
Der rohe Zustand der Maustasten. Das Win32-Subsystem verwendet diesen Member nicht.
lLastX
Typ: LONG
Die Bewegung in X-Richtung. Dies ist eine signierte relative Bewegung oder absolute Bewegung, abhängig vom Wert von usFlags.
lLastY
Typ: LONG
Die Bewegung in Y-Richtung. Dies ist eine signierte relative Bewegung oder absolute Bewegung, abhängig vom Wert von usFlags.
ulExtraInformation
Typ: ULONG
Die gerätespezifischen zusätzlichen Informationen für das Ereignis.
Hinweise
Wenn sich die Maus bewegt hat, die durch MOUSE_MOVE_RELATIVE oder MOUSE_MOVE_ABSOLUTE angegeben wird, geben lLastX und lLastY Informationen zu dieser Bewegung an. Die Informationen werden als relative oder absolute ganzzahlige Werte angegeben.
Wenn MOUSE_MOVE_RELATIVE Wert angegeben ist, geben lLastX und lLastY die Bewegung relativ zum vorherigen Mausereignis (die letzte gemeldete Position) an. Positive Werte bedeuten, dass die Maus nach rechts (oder nach unten) bewegt wird; negative Werte bedeuten, dass die Maus nach links (oder nach oben) bewegt wird.
Wenn MOUSE_MOVE_ABSOLUTE Wert angegeben wird, enthalten lLastX und lLastY normalisierte absolute Koordinaten zwischen 0 und 65.535. Koordinatenkarten (0,0) in der linken oberen Ecke der Anzeigeoberfläche; Koordinaten (65535,65535) karten auf der unteren rechten Ecke. In einem Multimonitorsystem werden die Koordinaten dem primären Monitor zugeordnet.
Wenn MOUSE_VIRTUAL_DESKTOP zusätzlich zu MOUSE_MOVE_ABSOLUTE angegeben 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)
{
if (raw->mouse.usFlags & MOUSE_MOVE_ABSOLUTE)
{
RECT rect;
if (raw->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(raw->mouse.lLastX, rect.right, 65535) + rect.left;
int absoluteY = MulDiv(raw->mouse.lLastY, rect.bottom, 65535) + rect.top;
...
}
else if (raw->mouse.lLastX != 0 || raw->mouse.lLastY != 0)
{
int relativeX = raw->mouse.lLastX;
int relativeY = raw->mouse.lLastY;
...
}
...
}
}
Im Gegensatz zu älteren WM_MOUSEMOVE Meldungen von Raw Input-Mausereignissen nicht den Auswirkungen der Mausgeschwindigkeit, die im Blatt "Mauseigenschaften" des Systemsteuerung festgelegt ist. Weitere Informationen finden Sie unter Übersicht über Mauseingaben .
Wenn das Mausrad bewegt wird, angegeben durch RI_MOUSE_WHEEL oder RI_MOUSE_HWHEEL in usButtonFlags, enthält usButtonData einen kurzen Vorzeichenwert, der die Entfernung angibt, die das Rad gedreht wird.
Die Radumdrehung ist ein Vielfaches von WHEEL_DELTA, das auf 120 eingestellt ist. Dies ist der Schwellenwert für die auszuführende Aktion, und für jedes Delta sollte eine solche Aktion (z. B. das Scrollen um ein Inkrement) erfolgen.
Das Delta wurde auf 120 festgelegt, damit Microsoft oder andere Anbieter genauere Mausräder (ein frei drehendes Mausrad ohne Kerben) bauen können, um mehr Meldungen pro Umdrehung, aber mit einem kleineren Wert in jeder Meldung zu senden. Um diese Funktion zu nutzen, können Sie entweder die eingehenden Delta-Werte addieren, bis WHEEL_DELTA erreicht ist (so dass Sie bei einer Delta-Drehung die gleiche Antwort erhalten), oder Teilzeilen als Antwort auf die häufigeren Meldungen scrollen. Sie können auch Ihre Scrollgranularität auswählen und Deltas akkumulieren, bis diese erreicht ist.
Die Anwendung kann auch die aktuelle Benutzereinstellung zeilen-to-scroll und characters-to-scroll mithilfe der SystemParametersInfo-API mit SPI_GETWHEELSCROLLLINES oder SPI_GETWHEELSCROLLCHARS Parameter abrufen.
Hier ist ein Beispiel für einen solchen Radbehandlungscode:
if ((rawMouse.usButtonFlags & RI_MOUSE_WHEEL) == RI_MOUSE_WHEEL ||
(rawMouse.usButtonFlags & RI_MOUSE_HWHEEL) == RI_MOUSE_HWHEEL)
{
static const unsigned long defaultScrollLinesPerWheelDelta = 3;
static const unsigned long defaultScrollCharsPerWheelDelta = 1;
float wheelDelta = (float)(short)rawMouse.usButtonData;
float numTicks = wheelDelta / WHEEL_DELTA;
bool isHorizontalScroll = (rawMouse.usButtonFlags & RI_MOUSE_HWHEEL) == RI_MOUSE_HWHEEL;
bool isScrollByPage = false;
float scrollDelta = numTicks;
if (isHorizontalScroll)
{
unsigned long scrollChars = defaultScrollCharsPerWheelDelta;
SystemParametersInfo(SPI_GETWHEELSCROLLCHARS, 0, &scrollChars, 0);
scrollDelta *= scrollChars;
}
else
{
unsigned long scrollLines = defaultScrollLinesPerWheelDelta;
SystemParametersInfo(SPI_GETWHEELSCROLLLINES, 0, &scrollLines, 0);
if (scrollLines == WHEEL_PAGESCROLL)
isScrollByPage = true;
else
scrollDelta *= scrollLines;
}
}
Anforderungen
Anforderung | Wert |
---|---|
Unterstützte Mindestversion (Client) | Windows XP [nur Desktop-Apps] |
Unterstützte Mindestversion (Server) | Windows Server 2003 [nur Desktop-Apps] |
Kopfzeile | winuser.h (einschließlich Windows.h) |
Siehe auch
Konzept
Referenz
Übersicht über Mauseingaben (Legacy)
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für