WM_POINTERUPDATE Nachricht
Veröffentlicht, um ein Update auf einem Zeiger bereitzustellen, der kontakt über den Clientbereich eines Fensters oder auf einem zeigenden, nicht gekapselten Zeiger über den Clientbereich eines Fensters gemacht hat. Während der Mauszeiger darauf zeigt, zielt die Nachricht darauf ab, welches Fenster der Zeiger übergeht. Während sich der Zeiger mit der Oberfläche in Kontakt befindet, wird der Zeiger implizit auf das Fenster erfasst, über dem der Zeiger Kontakt hergestellt hat, und dieses Fenster erhält weiterhin Eingaben für den Zeiger, bis er den Kontakt unterbrochen hat.
! [Wichtig]
Desktop-Apps sollten DPI-Werte beachten. Wenn Ihre App keine DPI-Werte erkennt, können Bildschirmkoordinaten, die in Zeigermeldungen und verwandten Strukturen enthalten sind, aufgrund der DPI-Virtualisierung ungenau erscheinen. Die DPI-Virtualisierung bietet automatische Skalierungsunterstützung für Anwendungen, die nicht DPI-fähig sind und standardmäßig aktiv sind (Benutzer können sie deaktivieren). Weitere Informationen finden Sie unter Writing High-DPI Win32 Applications.
#define WM_POINTERUPDATE 0x0245
Parameter
-
wParam-
-
Enthält Informationen zum Zeiger. Verwenden Sie die folgenden Makros, um Informationen aus dem wParam-Parameter abzurufen.
GET_POINTERID_WPARAM(wParam): der Zeigerbezeichner.
IS_POINTER_NEW_WPARAM(wParam): ein Flag, das angibt, ob diese Nachricht die erste Eingabe darstellt, die von einem neuen Zeiger generiert wurde.
IS_POINTER_INRANGE_WPARAM(wParam): ein Flag, das angibt, ob diese Nachricht während der Lebensdauer von einem Zeiger generiert wurde. Dieses Kennzeichen ist für Nachrichten nicht festgelegt, die angeben, dass der Zeiger den Erkennungsbereich verlassen hat.
IS_POINTER_INCONTACT_WPARAM(wParam): ein Flag, das angibt, ob diese Nachricht von einem Zeiger generiert wurde, der mit der Fensteroberfläche in Kontakt steht. Dieses Kennzeichen ist nicht für Nachrichten festgelegt, die auf einen Zeiger zeigen.
IS_POINTER_PRIMARY_WPARAM(wParam): Gibt an, dass dieser Zeiger als primär festgelegt wurde.
IS_POINTER_FIRSTBUTTON_WPARAM(wParam): ein Flag, das angibt, ob eine primäre Aktion vorhanden ist.
- Dies entspricht einer linken Maustaste nach unten.
- Ein Touchpointer hat diesen Satz, wenn er mit der Digitalisiereroberfläche in Kontakt steht.
- Ein Stiftzeiger hat diesen Satz, wenn er mit der Digitalisierungsgerätoberfläche kontaktiert ist, ohne dass Tasten gedrückt sind.
IS_POINTER_SECONDBUTTON_WPARAM(wParam): ein Flag, das angibt, ob eine sekundäre Aktion vorhanden ist.
- Dies ist analog zur rechten Maustaste nach unten.
- Ein Stiftzeiger hat diesen Satz, wenn er mit der Digitalisiereroberfläche kontaktiert ist, mit der Drucktaste des Stifts gedrückt.
IS_POINTER_THIRDBUTTON_WPARAM(wParam): ein Flag, das angibt, ob eine oder mehrere tertiäre Aktionen basierend auf dem Zeigertyp vorhanden sind; Anwendungen, die auf tertiäre Aktionen reagieren möchten, müssen Spezifische Informationen für den Zeigertyp abrufen, um zu bestimmen, welche tertiären Schaltflächen gedrückt werden. Beispielsweise kann eine Anwendung die Schaltflächenzustände eines Stifts bestimmen, indem sie GetPointerPenInfo- aufrufen und die Flags untersuchen, die Schaltflächenzustände angeben.
IS_POINTER_FOURTHBUTTON_WPARAM(wParam): ein Flag, das angibt, ob der angegebene Zeiger vierte Aktion ausgeführt hat. Anwendungen, die auf vierte Aktionen reagieren möchten, müssen Spezifische Informationen für den Zeigertyp abrufen, um zu ermitteln, ob die erste erweiterte Maustaste (XButton1) gedrückt wird.
IS_POINTER_FIFTHBUTTON_WPARAM(wParam): ein Flag, das angibt, ob der angegebene Zeiger fünfte Aktion ausgeführt hat. Anwendungen, die auf fünfte Aktionen reagieren möchten, müssen spezifische Informationen für den Zeigertyp abrufen, um zu ermitteln, ob die zweite erweiterte Maustaste (XButton2) gedrückt wird.
Weitere Informationen finden Sie unter Zeigerkennzeichnungen.
Anmerkung
Ein Mauszeiger hat keines der Schaltflächenkennzeichnungen festgelegt. Dies ist analog zu einer Mausbewegung ohne Maustasten nach unten. Eine Anwendung kann die Schaltflächenzustände eines Hoverstifts bestimmen, z. B. durch Aufrufen GetPointerPenInfo und Untersuchen der Flags, die Schaltflächenzustände angeben.
-
lParam-
-
Enthält die Punktposition des Zeigers.
Anmerkung
Da der Zeiger den Kontakt mit dem Gerät über einen nicht trivialen Bereich herstellen kann, kann dieser Punktstandort eine Vereinfachung eines komplexeren Zeigerbereichs darstellen. Wann immer möglich, sollte eine Anwendung anstelle der Punktposition die vollständigen Zeigerbereichsinformationen verwenden.
Verwenden Sie die folgenden Makros, um die physischen Bildschirmkoordinaten des Punkts abzurufen.
- GET_X_LPARAM(lParam): die x-Koordinate (horizontaler Punkt).
- GET_Y_LPARAM(lParam): die Y-Koordinate (vertikaler Punkt).
Rückgabewert
Wenn eine Anwendung diese Meldung verarbeitet, sollte sie Null zurückgeben.
Wenn die Anwendung diese Meldung nicht verarbeitet, sollte sie DefWindowProcaufrufen.
Bemerkungen
Jeder Zeiger verfügt während seiner Lebensdauer über einen eindeutigen Zeigerbezeichner. Die Lebensdauer eines Zeigers beginnt, wenn er zum ersten Mal erkannt wird.
Wenn ein Zeiger erkannt wird, wird eine WM_POINTERENTER Nachricht generiert. Eine WM_POINTERDOWN Nachricht gefolgt von einer WM_POINTERENTER Nachricht wird generiert, wenn ein nicht zeigender Zeiger erkannt wird.
Während der Lebensdauer kann ein Zeiger eine Reihe von WM_POINTERUPDATE Nachrichten generieren, während der Mauszeiger oder kontaktiert wird.
Die Lebensdauer eines Zeigers endet, wenn er nicht mehr erkannt wird. Dadurch wird eine WM_POINTERLEAVE Nachricht generiert.
Wenn ein Zeiger abgebrochen wird, wird POINTER_FLAG_CANCELED festgelegt.
Eine WM_POINTERLEAVE Nachricht kann auch generiert werden, wenn ein nicht erfasster Zeiger außerhalb der Grenzen eines Fensters bewegt wird.
Um die horizontale und vertikale Position eines Zeigers abzurufen, verwenden Sie Folgendes:
xPos = GET_X_LPARAM(lParam);
yPos = GET_Y_LPARAM(lParam);
Das MAKEPOINTS Makro kann auch verwendet werden, um den lParam-Parameter in eine POINTS Struktur zu konvertieren.
Die GetKeyState--Funktion kann verwendet werden, um die mit dieser Nachricht verbundenen Tastenzustände der Tastaturmodifizierer zu bestimmen. Um beispielsweise zu erkennen, dass die ALT-Taste gedrückt wurde, überprüfen Sie, ob GetKeyState- (VK_MENU) < 0.
Wenn die Anwendung diese Meldung nicht verarbeitet, kann DefWindowProc- eine oder mehrere WM_GESTURE Nachrichten generieren, wenn die Abfolge der Eingaben von diesem und möglicherweise andere Zeiger als Geste erkannt wird. Wenn eine Geste nicht erkannt wird, kann DefWindowProc- Mauseingaben generieren.
Wenn eine Anwendung selektiv zeigereingaben verwendet und den Rest an DefWindowProcübergibt, wird das resultierende Verhalten nicht definiert.
Verwenden Sie die GetPointerInfo--Funktion, um weitere Informationen zu dieser Nachricht abzurufen.
Wenn die Anwendung diese Nachrichten nicht so schnell verarbeitet, wie sie generiert werden, werden möglicherweise einige Verschiebungen zusammengeklammert. Der Verlauf der Eingaben, die in diese Nachricht zusammengeführt wurden, kann mithilfe der GetPointerInfoHistory-Funktion abgerufen werden.
Beispiele
Im folgenden Codebeispiel wird gezeigt, wie Sie GET_X_LPARAM, GET_Y_LPARAM, IS_POINTER_FIRSTBUTTON_WPARAMund IS_POINTER_SECONDBUTTON_WPARAM verwenden, um relevante Informationen aus den Parametern wParam und lParam der WM_POINTERUPDATE Nachricht abzurufen.
int xPos = GET_X_LPARAM(lParam);
int yPos = GET_Y_LPARAM(lParam);
if (IS_POINTER_PRIMARYBUTTON_WPARAM(wParam))
{
// process pointer move while down, similar to mouse move with left button down
}
else if (IS_POINTER_SECONDARYBUTTON_WPARAM(wParam))
{
// process pointer move while down, similar to mouse move with right button down
}
Im folgenden Codebeispiel wird gezeigt, wie Sie GET_POINTERID_WPARAM verwenden, um die Zeiger-ID aus dem wParam-Parameter der WM_POINTERUPDATE Nachricht abzurufen.
POINTER_INFO pointerInfo;
UINT32 pointerId = GET_POINTERID_WPARAM(wParam);
// Retrieve common pointer information
if (!GetPointerInfo(pointerId, &pointerInfo))
{
// failure, call GetLastError()
}
else
{
// success, process pointerInfo
}
Das folgende Codebeispiel zeigt, wie verschiedene Zeigertypen behandelt werden.
POINTER_TOUCH_INFO touchInfo;
POINTER_PEN_INFO penInfo;
POINTER_INFO pointerInfo;
UINT32 pointerId = GET_POINTERID_WPARAM(wParam);
POINTER_INPUT_TYPE pointerType = PT_POINTER;
// default to unhandled to enable call to DefWindowProc
fHandled = FALSE;
if (!GetPointerType(pointerId, &pointerType))
{
// failure, call GetLastError()
// set PT_POINTER to fall to default case below
pointerType = PT_POINTER;
}
switch (pointerType)
{
case PT_TOUCH:
// Retrieve touch information
if (!GetPointerTouchInfo(pointerId, &touchInfo))
{
// failure, call GetLastError()
}
else
{
// success, process touchInfo
// mark as handled to skip call to DefWindowProc
fHandled = TRUE;
}
break;
case PT_PEN:
// Retrieve pen information
if (!GetPointerPenInfo(pointerId, &penInfo))
{
// failure, call GetLastError()
}
else
{
// success, process penInfo
// mark as handled to skip call to DefWindowProc
fHandled = TRUE;
}
break;
default:
if (!GetPointerInfo(pointerId, &pointerInfo))
{
// failure.
}
else
{
// success, proceed with pointerInfo.
fHandled = HandleGenericPointerInfo(&pointerInfo);
}
break;
}
Anforderungen
Anforderung | Wert |
---|---|
Mindestens unterstützter Client |
Windows 8 [nur Desktop-Apps] |
Mindestens unterstützter Server |
Windows Server 2012 [nur Desktop-Apps] |
Kopfball |
|
Siehe auch
-
Referenz-