Dela via


WM_POINTERDOWN meddelande

Postat när en pekare får kontakt över klientområdet i ett fönster. Det här indatameddelandet riktar sig mot det fönster som pekaren kontaktar och pekaren registreras implicit i fönstret så att fönstret fortsätter att ta emot indata för pekaren tills den bryter kontakten.

Ett fönster tar emot det här meddelandet via funktionen WindowProc.

! [Viktigt]
Skrivbordsappar bör vara DPI-medvetna. Om din app inte är DPI-medveten kan skärmkoordinater i pekarmeddelanden och relaterade strukturer verka felaktiga på grund av DPI-virtualisering. DPI-virtualisering ger stöd för automatisk skalning till program som inte är DPI-medvetna och som är aktiva som standard (användarna kan inaktivera den). Mer information finns i Writing High-DPI Win32 Applications.

#define WM_POINTERDOWN                   0x0246

Parametrar

wParam

Innehåller information om pekaren. Använd följande makron för att hämta information från parametern wParam.

  • GET_POINTERID_WPARAM(wParam): pekaridentifieraren.

  • IS_POINTER_NEW_WPARAM(wParam): en flagga som anger om det här meddelandet representerar den första indata som genereras av en ny pekare.

  • IS_POINTER_INRANGE_WPARAM(wParam): en flagga som anger om det här meddelandet genererades av en pekare under dess livslängd. Den här flaggan är inte inställd på meddelanden som anger att pekaren har vänster identifieringsintervall

  • IS_POINTER_INCONTACT_WPARAM(wParam): en flagga som anger om meddelandet genererades av en pekare som är i kontakt med fönsterytan. Den här flaggan är inte inställd på meddelanden som anger en hovringspekare.

  • IS_POINTER_PRIMARY_WPARAM(wParam): anger att den här pekaren har angetts som primär.

  • IS_POINTER_FIRSTBUTTON_WPARAM(wParam): en flagga som anger om det finns en primär åtgärd.

    • Detta är likt en mus vänster knapp nedåt.
    • En pekpekare har den här uppsättningen när den är i kontakt med digitaliserarytan.
    • En pennpekare kommer att ha den här uppsättningen när den är i kontakt med digitaliserarytan utan att några knappar trycks in.
  • IS_POINTER_SECONDBUTTON_WPARAM(wParam): en flagga som anger om det finns en sekundär åtgärd.

    • Detta är analogt med en mus högerknapp nedåt.
    • En pennpekare kommer att ha den här uppsättningen när den är i kontakt med digitaliserarytan med pennpipan tryckt.
  • IS_POINTER_THIRDBUTTON_WPARAM(wParam): en flagga som anger om det finns en eller flera tertiära åtgärder baserat på pekartypen; program som vill svara på tertiära åtgärder måste hämta information som är specifik för pekartypen för att avgöra vilka tertiära knappar som trycks in. Ett program kan till exempel fastställa knapparna för en penna genom att anropa GetPointerPenInfo och undersöka flaggorna som anger knapptillstånd.

  • IS_POINTER_FOURTHBUTTON_WPARAM(wParam): en flagga som anger om den angivna pekaren vidtog den fjärde åtgärden. Program som vill svara på fjärde åtgärder måste hämta information som är specifik för pekartypen för att avgöra om den första utökade musen (XButton1) trycks in.

  • IS_POINTER_FIFTHBUTTON_WPARAM(wParam): en flagga som anger om den angivna pekaren vidtog den femte åtgärden. Program som vill svara på femte åtgärder måste hämta information som är specifik för pekartypen för att avgöra om den andra utökade musen (XButton2) trycks in.

    Mer information finns i pekarflaggor.

    Not

    En hovringspekare har ingen av knappflaggorna inställda. Detta motsvarar en musflytt utan att musknapparna är nere. Ett program kan fastställa knapparna för en hovringspenna, till exempel genom att anropa GetPointerPenInfo och undersöka flaggorna som anger knapptillstånd.

lParam

Innehåller pekarens punktplats.

Not

Eftersom pekaren kan komma i kontakt med enheten över ett icke-trivialt område kan den här punktplatsen vara en förenkling av ett mer komplext pekarområde. När det är möjligt bör ett program använda fullständig information om pekarområdet i stället för punktplatsen.

Använd följande makron för att hämta punktens fysiska skärmkoordinater.

Returvärde

Om ett program bearbetar det här meddelandet ska det returnera noll.

Om programmet inte bearbetar det här meddelandet bör det anropa DefWindowProc.

Anmärkningar

! [Viktigt]
När ett fönster förlorar avbildningen av en pekare och det tar emot WM_POINTERCAPTURECHANGED-meddelandet, får det vanligtvis inga ytterligare meddelanden. Därför är det viktigt att du inte gör några antaganden baserat på jämnt kopplade WM_POINTERDOWN/WM_POINTERUP eller WM_POINTERENTER/WM_POINTERLEAVE meddelanden.

Varje pekare har en unik pekaridentifierare under sin livslängd. Livslängden för en pekare börjar när den först identifieras.

Ett WM_POINTERENTER meddelande genereras om en hovringspekare identifieras. Ett WM_POINTERDOWN meddelande följt av ett WM_POINTERENTER meddelande genereras om en pekare som inte hovrar identifieras.

Under dess livslängd kan en pekare generera en serie WM_POINTERUPDATE meddelanden medan den hovrar eller är i kontakt.

Livslängden för en pekare slutar när den inte längre identifieras. Detta genererar ett WM_POINTERLEAVE meddelande.

När en pekare avbryts anges POINTER_FLAG_CANCELED.

Ett WM_POINTERLEAVE meddelande kan också genereras när en icke-infångad pekare flyttas utanför gränserna för ett fönster.

Använd följande för att hämta pekarens vågräta och lodräta position:

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

Om du vill konvertera parametern lParam till en POINTS) -struktur använder du makrot MAKEPOINTS.

Om du vill hämta ytterligare information som är associerad med meddelandet använder du funktionen GetPointerInfo.

Använd funktionen GetKeyState för att fastställa nyckeltillstånd för tangentbordsmodifieraren som är associerad med det här meddelandet. Om du till exempel vill identifiera att ALT-tangenten har tryckts på kontrollerar du om GetKeyState(VK_MENU) < 0.

Observera att om programmet inte bearbetar det här meddelandet kan DefWindowProc generera ett eller flera WM_GESTURE meddelanden om indatasekvensen från detta och eventuellt andra pekare identifieras som en gest. Om en gest inte identifieras kan DefWindowProc generera musindata.

Om ett program selektivt använder vissa pekarindata och skickar resten till DefWindowProcär det resulterande beteendet odefinierat.

När ett fönster förlorar avbildningen av en pekare och tar emot WM_POINTERCAPTURECHANGED-meddelandet får det vanligtvis inga ytterligare meddelanden. Därför är det viktigt att ett fönster inte gör några antaganden om dess pekarstatus, oavsett om det tar emot jämnt kopplade DOWN/UP- eller RETUR-/LEAVE-meddelanden.

Exempel

I följande kodexempel visas hur du använder IS_POINTER_FIRSTBUTTON_WPARAM, GET_X_LPARAM, GET_Y_LPARAMoch IS_POINTER_SECONDBUTTON_WPARAMför att hämta relevant information som är associerad med WM_POINTERDOWN meddelandet.

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
}

I följande kodexempel visas hur du använder GET_POINTERID_WPARAM för att hämta pekar-ID:t från WM_POINTERDOWN-meddelandet.

POINTER_INFO pointerInfo;
UINT32       pointerId = GET_POINTERID_WPARAM(wParam);

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

I följande kodexempel visas hur du hanterar olika pekartyper, till exempel pek-, penn- eller standardpekenheter.

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

Krav

Krav Värde
Lägsta klient som stöds
Windows 8 [endast skrivbordsappar]
Lägsta server som stöds
Windows Server 2012 [endast skrivbordsappar]
Rubrik
Winuser.h (inkludera Windows.h)

Se även

Meddelanden

referens

pekarflaggor

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