WM_POINTERUPDATE-Nachricht

Veröffentlicht, um ein Update für einen Zeiger zur Verfügung zu stellen, der den Kontakt über den Clientbereich eines Fensters hergestellt hat, oder auf einen nicht gekapselten Zeiger, der auf den Clientbereich eines Fensters zeigt. Während der Zeiger darauf zeigt, richtet sich die Nachricht an das Fenster, über dem sich der Zeiger befindet. Während der Zeiger mit der Oberfläche in Kontakt ist, wird der Zeiger implizit auf das Fenster erfasst, über das der Zeiger kontaktiert wurde, und dieses Fenster erhält weiterhin Eingaben für den Zeiger, bis er den Kontakt unterbricht.

[! Wichtig]
Desktop-Apps sollten DPI-bewusst sein. Wenn Ihre App keine DPI-Unterstützung hat, können Bildschirmkoordinaten, die in Zeigermeldungen und verwandten Strukturen enthalten sind, aufgrund der DPI-Virtualisierung ungenau erscheinen. Die DPI-Virtualisierung bietet Unterstützung für die automatische Skalierung für Anwendungen, die nicht DPI-bewusst sind und standardmäßig aktiv sind (Benutzer können sie deaktivieren). Weitere Informationen finden Sie unter Writing High-DPI Win32 Applications ( Schreiben von Win32-Anwendungen mit hohem DPI-Code).

#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 Meldung 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 Flag ist nicht für Meldungen festgelegt, die angeben, dass der Zeiger über einen linken Erkennungsbereich verfügt.

  • IS_POINTER_INCONTACT_WPARAM(wParam): Ein Flag, das angibt, ob diese Nachricht von einem Zeiger generiert wurde, der mit der Fensteroberfläche in Kontakt ist. Dieses Flag ist nicht für Meldungen festgelegt, die auf einen Zeigenzeiger 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 es eine primäre Aktion gibt.

    • Dies entspricht einer linken Maustaste nach unten.
    • Ein Berührungszeiger hat diese Menge, wenn er mit der Digitizeroberfläche in Kontakt ist.
    • Ein Stiftzeiger hat diese Menge, wenn er mit der Digitizeroberfläche in Kontakt ist, ohne dass Schaltflächen gedrückt sind.
  • IS_POINTER_SECONDBUTTON_WPARAM(wParam): Ein Flag, das angibt, ob es eine sekundäre Aktion gibt.

    • Dies entspricht einer nach unten gedrückten Maustaste.
    • Ein Stiftzeiger hat diese Menge, wenn er mit der Digitizeroberfläche in Kontakt ist, während die Stifttaste gedrückt ist.
  • IS_POINTER_THIRDBUTTON_WPARAM(wParam): ein Flag, das angibt, ob eine oder mehrere tertiäre Aktionen basierend auf dem Zeigertyp durchgeführt werden. -Anwendungen, die auf tertiäre Aktionen reagieren möchten, müssen spezifische Informationen für den Zeigertyp abrufen, um zu bestimmen, welche Schaltflächen gedrückt werden. Beispielsweise kann eine Anwendung die Schaltflächenzustände eines Stifts bestimmen, indem getPointerPenInfo aufruft und die Flags untersucht werden, die Schaltflächenzustände angeben.

  • IS_POINTER_FOURTHBUTTON_WPARAM(wParam): Ein Flag, das angibt, ob der angegebene Zeiger die vierte Aktion verwendet hat. Anwendungen, die auf vierte Aktionen reagieren möchten, müssen spezifische Informationen für den Zeigertyp abrufen, um zu bestimmen, ob die erste erweiterte Mausschaltfläche (XButton1) gedrückt wird.

  • IS_POINTER_FIFTHBUTTON_WPARAM(wParam): Ein Flag, das angibt, ob der angegebene Zeiger die fünfte Aktion verwendet hat. Anwendungen, die auf fünfte Aktionen reagieren möchten, müssen spezifische Informationen für den Zeigertyp abrufen, um zu bestimmen, ob die zweite erweiterte Mausschaltfläche (XButton2) gedrückt wird.

    Weitere Informationen finden Sie unter Zeigerflags.

    Hinweis

    Für einen zeigenden Zeiger ist keines der Schaltflächenflags festgelegt. Dies entspricht einer Mausbewegung, bei der keine Maustaste nach unten bewegt wird. Eine Anwendung kann die Schaltflächenzustände eines Hoverstifts bestimmen, z. B. durch Aufrufen von GetPointerPenInfo und Untersuchen der Flags, die Schaltflächenzustände angeben.

lParam

Enthält die Punktposition des Zeigers.

Hinweis

Da der Zeiger den Kontakt mit dem Gerät über einen nicht trivialen Bereich stellen kann, kann diese Punktposition eine Vereinfachung eines komplexeren Zeigerbereichs sein. Wenn möglich, sollte eine Anwendung die vollständigen Zeigerbereichsinformationen anstelle der Punktposition 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 Nachricht verarbeitet, sollte sie 0 (null) zurückgeben.

Wenn die Anwendung diese Meldung nicht verarbeiten kann, sollte sie DefWindowProc aufrufen.

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.

Eine WM_POINTERENTER wird generiert, wenn ein zeigeriger Zeiger erkannt wird. Eine WM_POINTERDOWN meldung gefolgt von einer WM_POINTERENTER wird generiert, wenn ein zeigerfreier Zeiger erkannt wird.

Während seiner Lebensdauer kann ein Zeiger eine Reihe von Nachrichten generieren WM_POINTERUPDATE während er darauf oder in Kontakt ist.

Die Lebensdauer eines Zeigers endet, wenn er nicht mehr erkannt wird. Dadurch wird eine WM_POINTERLEAVE generiert.

Wenn ein Zeiger abgebrochen wird, wird POINTER_FLAG_CANCELED festgelegt.

Eine WM_POINTERLEAVE meldung 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 zu erhalten, 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 Tastenzustände des Tastaturmodifizierers zu bestimmen, die dieser Meldung zugeordnet sind. Um beispielsweise zu erkennen, dass die ALT-TASTE gedrückt wurde, überprüfen Sie, ob GetKeyState (VK_MENU) < 0 ist.

Wenn die Anwendung diese Nachricht nicht verarbeiten kann, generiert DefWindowProc möglicherweise eine oder mehrere WM_GESTURE-Nachrichten, wenn die Eingabesequenz von dieser und ggf. andere Zeiger als Geste erkannt wird. Wenn eine Geste nicht erkannt wird, generiert DefWindowProc möglicherweise Mauseingaben.

Wenn eine Anwendung selektiv Zeigereingaben verwendet und den Rest an DefWindowProcübergibt, ist 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 wie generiert verarbeiten, können einige Verschiebebewegungen zusammenfingen. Der Verlauf der Eingaben, die in dieser Nachricht zusammengeknaust wurden, kann mit der GetPointerInfoHistory-Funktion abgerufen werden.

Beispiele

Das folgende Codebeispiel zeigt, 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 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
}

Das folgende Codebeispiel zeigt, wie sie GET_POINTERID_WPARAM, um die Zeiger-ID aus dem wParam-Parameter der WM_POINTERUPDATE abzurufen.

POINTER_INFO pointerInfo;
UINT32       pointerId = GET_POINTERID_WPARAM(wParam);

// Retrieve common pointer information
if (!GetPointerInfo(pointerId, &amp;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;
}

Requirements (Anforderungen)

Anforderung Wert
Unterstützte Mindestversion (Client)
[Windows 8 Nur Desktop-Apps]
Unterstützte Mindestversion (Server)
[Windows Server 2012 Nur Desktop-Apps]
Header
Winuser.h (include Windows.h)

Weitere Informationen

Meldungen

Verweis

Zeigerflags

GET_POINTERID_WPARAM

IS_POINTER_NEW_WPARAM

IS_POINTER_INRANGE_WPARAM

IS_POINTER_INCONTACT_WPARAM

IS_POINTER_PRIMARY_WPARAM

IS_POINTER_FIRSTBUTTON_WPARAM

IS_POINTER_SECONDBUTTON_WPARAM

IS_POINTER_THIRDBUTTON_WPARAM

IS_POINTER_FOURTHBUTTON_WPARAM

IS_POINTER_FIFTHBUTTON_WPARAM