Not
Å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 för att ge en uppdatering på en pekare som tog kontakt över klientområdet i ett fönster eller på en hovrande okapslade pekare över klientområdet i ett fönster. Medan pekaren hovrar riktas meddelandet mot det fönster som pekaren råkar vara över. Pekaren är i kontakt med ytan, men pekaren avbildas implicit i fönstret där pekaren tog kontakt och det fönstret fortsätter att ta emot indata för pekaren tills den bryter kontakten.
! [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_POINTERUPDATE 0x0245
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
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);
Det MAKEPOINTS- makrot kan också användas för att konvertera parametern lParam till en POINTS- struktur.
Funktionen GetKeyState kan användas för att fastställa vilka nyckeltillstånd för tangentbordsmodifierare som är associerade med det här meddelandet. Om du till exempel vill identifiera att ALT-tangenten har tryckts på kontrollerar du om GetKeyState (VK_MENU) < 0.
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.
Använd funktionen GetPointerInfo för att hämta ytterligare information om det här meddelandet.
Om programmet inte bearbetar dessa meddelanden så snabbt som de genereras kan vissa rörelser sammanslås. Historiken för indata som har sammansänts i det här meddelandet kan hämtas med hjälp av funktionen GetPointerInfoHistory.
Exempel
I följande kodexempel visas hur du använder GET_X_LPARAM, GET_Y_LPARAM, IS_POINTER_FIRSTBUTTON_WPARAMoch IS_POINTER_SECONDBUTTON_WPARAM för att hämta relevant information från parametrarna wParam och lParam i WM_POINTERUPDATE meddelandet.
int xPos = GET_X_LPARAM(lParam);
int yPos = GET_Y_LPARAM(lParam);
if (IS_POINTER_PRIMARYBUTTON_WPARAM(wParam))
{
// process pointer move while down, similar to mouse move with left button down
}
else if (IS_POINTER_SECONDARYBUTTON_WPARAM(wParam))
{
// process pointer move while down, similar to mouse move with 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 parametern wParam i WM_POINTERUPDATE-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.
POINTER_TOUCH_INFO touchInfo;
POINTER_PEN_INFO penInfo;
POINTER_INFO pointerInfo;
UINT32 pointerId = GET_POINTERID_WPARAM(wParam);
POINTER_INPUT_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 = HandleGenericPointerInfo(&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