WM_POINTERDOWN-Meldung

Wird bereitgestellt, wenn ein Zeiger einen Kontakt über den Clientbereich eines Fensters herstellt. Diese Eingabenachricht zielt auf das Fenster ab, über das der Zeiger Kontakt herstellt, und der Zeiger wird implizit auf das Fenster erfasst, sodass das Fenster weiterhin Eingaben für den Zeiger empfängt, bis der Kontakt unterbrochen wird.

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

![Wichtig]
Desktop-Apps sollten DPI-fähig sein. Wenn Ihre App nicht DPI-fähig ist, erscheinen bildschirmkoordinaten, die in Zeigermeldungen und zugehörigen Strukturen enthalten sind, aufgrund der DPI-Virtualisierung möglicherweise ungenau. 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_POINTERDOWN                   0x0246

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 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 steht. Dieses Flag ist nicht für Nachrichten festgelegt, die auf einen zeigernden 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 Maustaste nach unten.
    • Ein Fingereingabezeiger hat diese Einstellung, wenn er mit der Digitalisiereroberfläche in Kontakt steht.
    • Bei einem Stiftzeiger wird diese Einstellung festgelegt, wenn er mit der Digitalisiereroberfläche in Kontakt steht, ohne dass Schaltflächen gedrückt werden.
  • IS_POINTER_SECONDBUTTON_WPARAM(wParam): Ein Flag, das angibt, ob eine sekundäre Aktion vorhanden ist.

    • Dies entspricht einer Maustaste nach unten.
    • Bei einem Stiftzeiger wird diese Einstellung festgelegt, wenn er mit der Digitalisiereroberfläche in Kontakt steht 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 Mausschaltfläche (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

    Auf einen 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 ermitteln, indem sie beispielsweise GetPointerPenInfo aufruft und die Flags untersucht, die Schaltflächenzustände angeben.

lParam

Enthält die Punktposition des Zeigers.

Hinweis

Da der Zeiger über einen nicht trivialen Bereich Kontakt mit dem Gerät herstellen 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 treffen, die auf gleichmäßig gekoppelten WM_POINTERDOWN/WM_POINTERUP oder WM_POINTERENTER/WM_POINTERLEAVE Benachrichtigungen basieren.

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

Wenn ein Zeiger abgebrochen wird, wird POINTER_FLAG_CANCELED festgelegt.

Eine WM_POINTERLEAVE Meldung kann auch generiert werden, wenn sich ein nicht erfasster Zeiger außerhalb der Grenzen eines Fensters bewegt.

Um die horizontale und vertikale Position eines Zeigers abzurufen, verwenden Sie Folgendes:

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

Verwenden Sie das MAKEPOINTS-Makro, um den lParam-Parameter in eine POINTS)-Struktur zu konvertieren.

Verwenden Sie die GetPointerInfo-Funktion , um weitere Informationen abzurufen, die der Nachricht zugeordnet sind.

Verwenden Sie die GetKeyState-Funktion , um die Zustände der Tastaturmodifizierertaste 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.

Beachten Sie, dass DefWindowProc , wenn die Anwendung diese Nachricht nicht verarbeitet, eine oder mehrere WM_GESTURE Nachrichten generiert, wenn die Reihenfolge der Eingaben aus 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.

Wenn ein Fenster die Erfassung eines Zeigers verliert und die WM_POINTERCAPTURECHANGED Benachrichtigung empfängt, erhält es in der Regel keine weiteren Benachrichtigungen. Daher ist es wichtig, dass ein Fenster keine Annahmen über seinen Zeiger status macht, unabhängig davon, ob es gleichmäßig gekoppelte DOWN/UP- oder ENTER/LEAVE-Benachrichtigungen empfängt.

Beispiele

Im folgenden Codebeispiel wird gezeigt, wie sie IS_POINTER_FIRSTBUTTON_WPARAM, GET_X_LPARAM, GET_Y_LPARAM und IS_POINTER_SECONDBUTTON_WPARAMverwenden, um die relevanten Informationen abzurufen, die der WM_POINTERDOWN Nachricht zugeordnet sind.

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

if (IS_POINTER_PRIMARYBUTTON_WPARAM(wParam))
{
    // process pointer down, similar to mouse left button down
}
else if (IS_POINTER_SECONDARYBUTTON_WPARAM(wParam))
{
    // process pointer down, similar to mouse right button down
}

Im folgenden Codebeispiel wird gezeigt, wie Sie GET_POINTERID_WPARAM verwenden, um die Zeiger-ID aus der WM_POINTERDOWN 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 wie Toucheingabe, Stift oder Standardzeigergeräte behandelt werden.

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 (windows.h einschließen)

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