Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
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.
- GET_X_LPARAM(lParam): koordinaten x (vågrät punkt).
- GET_Y_LPARAM(lParam): koordinaten y (lodrät punkt).
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 |
|
Se även
-
referens