Delen via


WM_POINTERUP bericht

Geplaatst wanneer een aanwijzer die contact heeft gemaakt via het clientgebied van een venster wordt verbroken. Dit invoerbericht is gericht op het venster waarover de aanwijzer contact maakt en de aanwijzer wordt impliciet vastgelegd in het venster, zodat het venster invoerberichten blijft ontvangen, inclusief de WM_POINTERUP melding voor de aanwijzer 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_POINTERUP                  0x0247

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-aanwijzende aanwijzer 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:

Gebruik de volgende code om de horizontale en verticale positie te verkrijgen:

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

De macro MAKEPOINTS- kan ook worden gebruikt om de parameter lParam te converteren naar een PUNTEN structuur.

De functie GetKeyState kan worden gebruikt 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.

Als dit bericht niet door de toepassing wordt verwerkt, kan DefWindowProc- een of meer WM_GESTUREberichten genereren als de volgorde van invoer hiervan 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.

Gebruik de functie GetPointerInfo om meer informatie over dit bericht op te halen.

Voorbeelden

In het volgende codevoorbeeld ziet u hoe u de x- en y-positie ophaalt van de aanwijzer die aan dit bericht is gekoppeld.

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

// process pointer up, similar to mouse button up

In het volgende codevoorbeeld ziet u hoe u de aanwijzer-id ophaalt die aan dit bericht is gekoppeld.

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 typen aanwijzers verwerkt die aan dit bericht zijn gekoppeld.

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