WM_POINTERUP-Meldung

Wird veröffentlicht, wenn ein Zeiger, der einen Kontakt über den Clientbereich eines Fensters hergestellt hat, den Kontakt unterbricht. Diese Eingabenachricht zielt auf das Fenster ab, über das der Zeiger kontaktiert, und der Zeiger wird zu diesem Zeitpunkt implizit auf das Fenster erfasst, sodass das Fenster weiterhin Eingabenachrichten empfängt, einschließlich der WM_POINTERUP Benachrichtigung für den Zeiger, bis der Kontakt unterbrochen wird.

Ein Fenster empfängt diese Nachricht über seine WindowProc-Funktion .

![Wichtig]
Desktop-Apps sollten DPI-fähig sein. Wenn Ihre App nicht DPI-fähig ist, können bildschirmkoordinaten, die in Zeigernachrichten 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 Schreiben von Win32-Anwendungen mit hohem DPI-Wert.

#define WM_POINTERUP                  0x0247

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 wird.

  • IS_POINTER_INRANGE_WPARAM(wParam): Ein Flag, das angibt, ob diese Nachricht während ihrer Lebensdauer von einem Zeiger generiert wurde. Dieses Flag wird nicht für Nachrichten 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 Flag wird nicht für Nachrichten festgelegt, die auf einen zeigenden Zeiger hinweisen.

  • 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 ist analog zu einer Linken-Taste nach unten.
    • Bei einem Touchzeiger wird diese Einstellung festgelegt, wenn er mit der Digitizeroberfläche in Kontakt kommt.
    • Ein Stiftzeiger hat diese Einstellung, wenn er mit der Digitizeroberfläche in Kontakt kommt, ohne dass Knöpfe gedrückt werden.
  • IS_POINTER_SECONDBUTTON_WPARAM(wParam): Ein Flag, das angibt, ob eine sekundäre Aktion vorhanden ist.

    • Dies entspricht einer rechten Maustaste nach unten.
    • Ein Stiftzeiger hat diese Einstellung, wenn er mit der Digitizeroberfläche in Kontakt kommt und die Stiftfasstaste gedrückt ist.
  • 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 ermitteln, indem sie GetPointerPenInfo aufruft und die Flags untersucht, die Schaltflächenzustände angeben.

  • IS_POINTER_FOURTHBUTTON_WPARAM(wParam): Ein Flag, das angibt, ob der angegebene Zeiger die vierte Aktion ausgeführt 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 Maustaste (XButton1) gedrückt wird.

  • IS_POINTER_FIFTHBUTTON_WPARAM(wParam): Ein Flag , das angibt, ob der angegebene Zeiger die 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 bestimmen, ob die zweite erweiterte Maustaste (XButton2) gedrückt wird.

    Weitere Informationen finden Sie unter Zeigerflags .

    Hinweis

    Bei einem zeigenden Zeiger ist keines der Schaltflächenflags festgelegt. Dies ist analog zu einer Mausbewegung ohne Maustasten nach unten. Eine Anwendung kann die Schaltflächenzustände eines zeigenden Stifts 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 möglicherweise über einen nicht trivialen Bereich Kontakt mit dem Gerät aufnehmen kann, kann dieser Punktstandort eine Vereinfachung eines komplexeren Zeigerbereichs darstellen. 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 null zurückgeben.

Wenn die Anwendung diese Nachricht nicht verarbeitet, sollte sie DefWindowProc aufrufen.

Bemerkungen

![Wichtig]
Wenn ein Fenster die Erfassung eines Zeigers verliert und die WM_POINTERCAPTURECHANGED Benachrichtigung empfängt, erhält es in der Regel keine weiteren Benachrichtigungen. Aus diesem Grund ist es wichtig, dass Sie keine Annahmen basierend auf gleichmäßig gekoppelten WM_POINTERDOWN/WM_POINTERUP oder WM_POINTERENTER/WM_POINTERLEAVE Benachrichtigungen treffen.

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 Nachricht wird generiert, wenn ein Zeiger mit der Maus erkannt wird. Eine WM_POINTERDOWN Nachricht gefolgt von einer WM_POINTERENTER Nachricht wird generiert, wenn ein zeigerfreier Zeiger ohne Zeiger erkannt wird.

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

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 sich ein nicht erfasster Zeiger außerhalb der Grenzen eines Fensters bewegt.

Verwenden Sie Folgendes, um die horizontale und vertikale Position eines Zeigers abzurufen:

Verwenden Sie den folgenden Code, um die horizontale und vertikale Position abzurufen:

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 Zustände der Tastaturmodifizierer zu bestimmen, die dieser Nachricht zugeordnet sind. Um z. B. zu erkennen, dass die ALT-Taste gedrückt wurde, überprüfen Sie, ob GetKeyState(VK_MENU) < 0.

Wenn die Anwendung diese Nachricht nicht verarbeitet, generiert DefWindowProc möglicherweise eine oder mehrere WM_GESTURENachrichten, wenn die Reihenfolge der Eingaben von diesem und möglicherweise anderen Zeigern als Geste erkannt wird. Wenn eine Geste nicht erkannt wird, generiert DefWindowProc möglicherweise Mauseingaben.

Wenn eine Anwendung selektiv zeigereingaben nutzt und den Rest an DefWindowProc übergibt, ist das resultierende Verhalten nicht definiert.

Verwenden Sie die GetPointerInfo-Funktion , um weitere Informationen im Zusammenhang mit dieser Nachricht abzurufen.

Beispiele

Das folgende Codebeispiel zeigt, wie die x- und y-Position des Zeigers abgerufen werden, der dieser Nachricht zugeordnet ist.

int xPos = GET_X_LPARAM(lParam);
int yPos = GET_Y_LPARAM(lParam);

// process pointer up, similar to mouse button up

Das folgende Codebeispiel zeigt, wie Sie die dieser Nachricht zugeordnete Zeiger-ID abrufen.

POINTER_INFO pointerInfo;
UINT32       pointerId = GET_POINTERID_WPARAM(wParam);

// Retrieve common pointer information
if (!GetPointerInfo(pointerId, &pointerInfo))
{
    
// failure, call GetLastError()
}
else
{
    // success, process pointerInfo
}


Im folgenden Codebeispiel wird gezeigt, wie verschiedene Zeigertypen behandelt werden, die dieser Nachricht zugeordnet sind.

POINTER_TOUCH_INFO   touchInfo;
POINTER_PEN_INFO     penInfo;
POINTER_INFO pointerInfo;
UINT32       pointerId = GET_POINTERID_WPARAM(wParam);
POINTER_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 = HandleGenericPointerMessage(&pointerInfo);
    }
    break;
}

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 (einschließlich Windows.h)

Siehe auch

Meldungen

Referenz

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