Lezen in het Engels

Delen via


WM_POINTERDOWN bericht

Geplaatst wanneer een aanwijzer contact maakt via het clientgebied van een venster. Dit invoerbericht is gericht op het venster waarover de aanwijzer contact maakt en de aanwijzer wordt impliciet vastgelegd in het venster, zodat het venster nog steeds invoer voor de aanwijzer ontvangt totdat het contact wordt verbroken.

Een venster ontvangt dit bericht via de functie WindowProc.

! [Belangrijk]
Desktop-apps moeten DPI-bewust zijn. Als uw app geen DPI-kennis heeft, kunnen schermcoördinaten in aanwijzerberichten en gerelateerde structuren onnauwkeurig lijken vanwege DPI-virtualisatie. DPI-virtualisatie biedt ondersteuning voor automatisch schalen voor toepassingen die niet dpi-bewust zijn en die standaard actief zijn (gebruikers kunnen deze uitschakelen). Zie Writing High-DPI Win32 Applicationsvoor meer informatie.

#define WM_POINTERDOWN                   0x0246

Parameters

wParam-

Bevat informatie over de aanwijzer. Gebruik de volgende macro's om informatie op te halen uit de parameter wParam.

  • GET_POINTERID_WPARAM(wParam): de aanwijzer-id.

  • IS_POINTER_NEW_WPARAM(wParam): een vlag die aangeeft of dit bericht de eerste invoer vertegenwoordigt die wordt gegenereerd door een nieuwe aanwijzer.

  • IS_POINTER_INRANGE_WPARAM(wParam): een vlag die aangeeft of dit bericht tijdens de levensduur is gegenereerd door een aanwijzer. Deze vlag is niet ingesteld op berichten die aangeven dat de aanwijzer het detectiebereik links heeft

  • IS_POINTER_INCONTACT_WPARAM(wParam): een vlag die aangeeft of dit bericht is gegenereerd door een aanwijzer die in contact staat met het vensteroppervlak. Deze vlag is niet ingesteld op berichten die wijzen op een aanwijzer.

  • IS_POINTER_PRIMARY_WPARAM(wParam): geeft aan dat deze aanwijzer is aangewezen als primair.

  • IS_POINTER_FIRSTBUTTON_WPARAM(wParam): een vlag die aangeeft of er een primaire actie is.

    • Dit is vergelijkbaar met een linkermuisknop omlaag.
    • Een touchpointer heeft deze set wanneer deze in contact is met het digitaleroppervlak.
    • Een penpointer heeft deze set wanneer deze in contact is met het digitaleroppervlak zonder knoppen ingedrukt te hebben.
  • IS_POINTER_SECONDBUTTON_WPARAM(wParam): een vlag die aangeeft of er een secundaire actie is.

    • Dit is vergelijkbaar met een muisknop naar beneden.
    • Een penpointer heeft deze set wanneer deze in contact is met het digitalisatieoppervlak met de penvatknop ingedrukt.
  • IS_POINTER_THIRDBUTTON_WPARAM(wParam): een vlag die aangeeft of er een of meer tertiaire acties zijn op basis van het type aanwijzer; toepassingen die op tertiaire acties willen reageren, moeten informatie ophalen die specifiek is voor het type aanwijzer om te bepalen welke tertiaire knoppen worden ingedrukt. Een toepassing kan bijvoorbeeld de status van knoppen van een pen bepalen door GetPointerPenInfo- aan te roepen en de vlaggen te bekijken die knopstatussen opgeven.

  • IS_POINTER_FOURTHBUTTON_WPARAM(wParam): een vlag die aangeeft of de opgegeven aanwijzer de vierde actie heeft uitgevoerd. Toepassingen die willen reageren op vierde acties, moeten informatie ophalen die specifiek is voor het type aanwijzer om te bepalen of de eerste XButton1-knop (uitgebreide muis) wordt ingedrukt.

  • IS_POINTER_FIFTHBUTTON_WPARAM(wParam): een vlag die aangeeft of de opgegeven aanwijzer de vijfde actie heeft ondernomen. Toepassingen die willen reageren op vijfde acties, moeten informatie ophalen die specifiek is voor het type aanwijzer om te bepalen of de tweede uitgebreide muisknop (XButton2) wordt ingedrukt.

    Zie aanwijzermarkeringen voor meer informatie.

    Notitie

    Bij een aanwijsaanwijzer zijn geen van de knopvlagmen ingesteld. Dit is vergelijkbaar met een muis beweegt zonder muisknoppen omlaag. Een toepassing kan de knoppenstatussen van een aanwijspen bepalen, bijvoorbeeld door GetPointerPenInfo aan te roepen en de vlaggen te bekijken die knopstatussen opgeven.

lParam-

Bevat de puntlocatie van de aanwijzer.

Notitie

Omdat de aanwijzer contact kan maken met het apparaat via een niet-triviaal gebied, kan deze puntlocatie een vereenvoudiging zijn van een complexer puntgebied. Indien mogelijk moet een toepassing de volledige informatie over het aanwijzergebied gebruiken in plaats van de puntlocatie.

Gebruik de volgende macro's om de fysieke schermcoördinaten van het punt op te halen.

Retourwaarde

Als een toepassing dit bericht verwerkt, moet het nul retourneren.

Als dit bericht niet door de toepassing wordt verwerkt, moet deze DefWindowProc-aanroepen.

Opmerkingen

! [Belangrijk]
Wanneer een venster de opname van een aanwijzer verliest en de melding WM_POINTERCAPTURECHANGED ontvangt, ontvangt het meestal geen verdere meldingen. Daarom is het belangrijk dat u geen veronderstellingen maakt op basis van gelijkmatig gekoppelde WM_POINTERDOWN/WM_POINTERUP of WM_POINTERENTER/WM_POINTERLEAVE meldingen.

Elke aanwijzer heeft een unieke aanwijzer tijdens de levensduur. De levensduur van een aanwijzer begint wanneer deze voor het eerst wordt gedetecteerd.

Er wordt een WM_POINTERENTER bericht gegenereerd als er een aanwijzer wordt gedetecteerd. Er wordt een WM_POINTERDOWN bericht gegenereerd, gevolgd door een WM_POINTERENTER bericht als er een niet-aanwijsaanwijzer wordt gedetecteerd.

Tijdens de levensduur kan een aanwijzer een reeks WM_POINTERUPDATE berichten genereren terwijl deze de muisaanwijzer of contactpersoon aanwijst.

De levensduur van een aanwijzer eindigt wanneer deze niet meer wordt gedetecteerd. Hiermee wordt een WM_POINTERLEAVE bericht gegenereerd.

Wanneer een aanwijzer wordt afgebroken, wordt POINTER_FLAG_CANCELED ingesteld.

Er kan ook een WM_POINTERLEAVE bericht worden gegenereerd wanneer een niet-vastgelegde aanwijzer buiten de grenzen van een venster wordt verplaatst.

Als u de horizontale en verticale positie van een aanwijzer wilt verkrijgen, gebruikt u het volgende:

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

Als u de parameter lParam wilt converteren naar een PUNTEN) structuur, gebruikt u de macro MAKEPOINTS-.

Als u meer informatie wilt ophalen die aan het bericht is gekoppeld, gebruikt u de functie GetPointerInfo.

Gebruik de functie GetKeyState om de statussen van de toetsenbordaanpassingstoets te bepalen die aan dit bericht zijn gekoppeld. Als u bijvoorbeeld wilt detecteren dat de Alt-toets is ingedrukt, controleert u of GetKeyState(VK_MENU) < 0.

Houd er rekening mee dat als de toepassing dit bericht niet verwerkt, DefWindowProc- een of meer WM_GESTURE berichten kan genereren als de volgorde van invoer van dit bericht en mogelijk andere aanwijzers worden herkend als een gebaar. Als een gebaar niet wordt herkend, kan DefWindowProc- muisinvoer genereren.

Als een toepassing selectief bepaalde aanwijzerinvoer verbruikt en de rest doorgeeft aan DefWindowProc-, is het resulterende gedrag niet gedefinieerd.

Wanneer een venster de opname van een aanwijzer verliest en de melding WM_POINTERCAPTURECHANGED ontvangt, ontvangt het meestal geen verdere meldingen. Daarom is het belangrijk dat een venster geen veronderstellingen over de status van de aanwijzer maakt, ongeacht of het gelijkmatig gekoppelde DOWN - of ENTER / LEAVE-meldingen ontvangt.

Voorbeelden

In het volgende codevoorbeeld ziet u hoe u IS_POINTER_FIRSTBUTTON_WPARAM, GET_X_LPARAM, GET_Y_LPARAMen IS_POINTER_SECONDBUTTON_WPARAMgebruikt om de relevante informatie op te halen die is gekoppeld aan het WM_POINTERDOWN bericht.

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
}

In het volgende codevoorbeeld ziet u hoe u GET_POINTERID_WPARAM gebruikt om de aanwijzer-id op te halen uit het WM_POINTERDOWN bericht.

POINTER_INFO pointerInfo;
UINT32       pointerId = GET_POINTERID_WPARAM(wParam);

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

In het volgende codevoorbeeld ziet u hoe u verschillende aanwijzertypen, zoals aanraak-, pen- of standaardaanwijzerapparaten, kunt afhandelen.

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;
}

Eisen

Eis Waarde
Minimaal ondersteunde client
Windows 8 [alleen desktop-apps]
Minimaal ondersteunde server
Windows Server 2012 [alleen desktop-apps]
Rubriek
Winuser.h (inclusief Windows.h)

Zie ook

berichten

aanwijzermarkeringen

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