WM_POINTERUPDATE üzenet
Közzétéve, hogy frissítsen egy olyan mutatót, amely egy ablak ügyfélterületén vagy az ablak ügyfélterületére mutató, nem foglalt mutatóra mutat. Miközben az egérmutató rámutat, az üzenet azt célozza meg, amelyiken az egérmutató éppen túl van. Amíg a mutató érintkezik a felülettel, a mutató implicit módon arra az ablakra lesz rögzítve, amelyen a mutató névjegyet létesített, és az ablak továbbra is a kurzor bemenetét kapja, amíg meg nem szakítja a kapcsolatot.
! [Fontos]
Az asztali alkalmazásoknak tisztában kell lenniük a DPI-vel. Ha az alkalmazás nem tud a DPI-ről, a mutatóüzenetekben és a kapcsolódó struktúrákban található képernyőkoordináták pontatlannak tűnhetnek a DPI virtualizálása miatt. A DPI virtualizálás automatikus skálázási támogatást nyújt az olyan alkalmazások számára, amelyek nem ismerik a DPI-t, és alapértelmezés szerint aktívak (a felhasználók kikapcsolhatják). További információ: High-DPI Win32-alkalmazások írása.
#define WM_POINTERUPDATE 0x0245
Paraméterek
-
wParam
-
A mutatóval kapcsolatos információkat tartalmaz. A wParam paraméter adatainak lekéréséhez használja az alábbi makrókat.
GET_POINTERID_WPARAM(wParam): a mutató azonosítója.
IS_POINTER_NEW_WPARAM(wParam): egy jelölő, amely jelzi, hogy ez az üzenet az új mutató által létrehozott első bemenetet jelöli-e.
IS_POINTER_INRANGE_WPARAM(wParam): egy jelző, amely jelzi, hogy az üzenetet egy mutató hozta-e létre az élettartama során. Ez a jelző nincs beállítva azokra az üzenetekre, amelyek azt jelzik, hogy a mutató bal észlelési tartományt tartalmaz
IS_POINTER_INCONTACT_WPARAM(wParam): egy jelző, amely jelzi, hogy az üzenetet az ablakfelülettel érintkező mutató hozta-e létre. Ez a jelző nincs beállítva olyan üzeneteken, amelyek rámutatási mutatót jeleznek.
IS_POINTER_PRIMARY_WPARAM(wParam): azt jelzi, hogy ez a mutató elsődlegesként van kijelölve.
IS_POINTER_FIRSTBUTTON_WPARAM(wParam): egy jelölő, amely jelzi, hogy van-e elsődleges művelet.
- Ez hasonló a bal egérgombbal lefelé.
- A digitalizáló felülettel való érintkezéskor az érintőmutató ezt a készletet fogja beállítani.
- A tollmutató akkor jelenik meg, ha a digitalizáló felülettel érintkezik, gombnyomás nélkül.
IS_POINTER_SECONDBUTTON_WPARAM(wParam): egy jelző, amely jelzi, hogy van-e másodlagos művelet.
- Ez hasonló a jobb gombbal lefelé mutató egérgombhoz.
- A tollmutató akkor jelenik meg, ha a digitalizáló felülettel érintkezik a tollhordó gomb megnyomásával.
IS_POINTER_THIRDBUTTON_WPARAM(wParam): egy jelző, amely jelzi, hogy van-e egy vagy több harmadlagos művelet a mutató típusa alapján; a harmadlagos műveletekre reagálni kívánó alkalmazásoknak le kell kérnie a mutatótípusra vonatkozó információkat annak megállapításához, hogy mely terciergombokat nyomja le. Az alkalmazások például úgy határozhatják meg a toll gombállapotait, hogy meghívják GetPointerPenInfo, és megvizsgálják a gombállapotokat meghatározó jelzőket.
IS_POINTER_FOURTHBUTTON_WPARAM(wParam): jelölő, amely jelzi, hogy a megadott mutató a negyedik műveletet végezte-e. A negyedik műveletekre válaszolni kívánó alkalmazásoknak le kell kérnie a mutatótípusra vonatkozó információkat annak megállapításához, hogy az első kiterjesztett egérgomb (XButton1) lenyomva van-e.
IS_POINTER_FIFTHBUTTON_WPARAM(wParam): jelző, amely jelzi, hogy a megadott mutató az ötödik műveletet végezte-e. Az ötödik műveletekre válaszolni kívánó alkalmazásoknak le kell kérnie a mutatótípusra vonatkozó információkat annak megállapításához, hogy a második kiterjesztett egérgomb (XButton2) lenyomva van-e.
További részletekért lásd mutatójelölők.
Jegyzet
Az egérmutató egyik gombjelölője sem van beállítva. Ez hasonló ahhoz, mint amikor az egérgombok nem lépnek le. Az alkalmazások például a GetPointerPenInfo meghívásával és a gombállapotokat meghatározó jelzők vizsgálatával határozhatják meg a rámutató toll gombállapotait.
-
lParam
-
A mutató ponthelyét tartalmazza.
Jegyzet
Mivel az egérmutató nem triviális területen érintkezhet az eszközzel, ez a ponthely egy összetettebb mutatóterület egyszerűsítése lehet. Amikor csak lehetséges, az alkalmazásnak a pont helye helyett a teljes mutatóterület-információt kell használnia.
A pont fizikai képernyőkoordinátáinak lekéréséhez használja az alábbi makrókat.
- GET_X_LPARAM(lParam): az x (vízszintes pont) koordinátája.
- GET_Y_LPARAM(lParam): az y (függőleges pont) koordinátája.
Visszaadott érték
Ha egy alkalmazás feldolgozza ezt az üzenetet, nullát kell visszaadnia.
Ha az alkalmazás nem dolgozza fel ezt az üzenetet, hívja meg DefWindowProc.
Megjegyzések
Minden mutató egyedi mutatóazonosítóval rendelkezik az élettartama során. A mutató élettartama az első észleléskor kezdődik.
Ha rámutatási mutatót észlel, WM_POINTERENTER üzenet jön létre. A rendszer egy WM_POINTERDOWN üzenetet, majd egy WM_POINTERENTER üzenetet hoz létre, ha nem rámutató mutatót észlel.
Az egérmutató az élettartama során WM_POINTERUPDATE üzenetek sorozatát hozhatja létre, miközben rámutat vagy kapcsolatban van.
A mutató élettartama akkor ér véget, ha már nem észlelhető. Ez egy WM_POINTERLEAVE üzenetet generál.
Ha egy mutató megszakad, POINTER_FLAG_CANCELED van beállítva.
WM_POINTERLEAVE üzenet akkor is létre lehet hozni, ha egy nem rögzített mutató az ablak határain kívülre kerül.
A mutató vízszintes és függőleges helyzetének lekéréséhez használja a következőket:
xPos = GET_X_LPARAM(lParam);
yPos = GET_Y_LPARAM(lParam);
A MAKEPOINTS makró az lParam paraméter POINTS struktúrává alakításához is használható.
A GetKeyState függvénnyel meghatározhatja az üzenethez társított billentyűzetmódosító kulcsállapotokat. Ha például az ALT billentyű lenyomását szeretné észlelni, ellenőrizze, hogy GetKeyState (VK_MENU) 0 <-e.
Ha az alkalmazás nem dolgozza fel ezt az üzenetet, DefWindowProc egy vagy több WM_GESTURE üzenetet generálhat, ha az ebből és esetleg más mutatókból álló sorozat kézmozdulatként van felismerve. Ha egy kézmozdulatot nem ismer fel, DefWindowProc egérbemenetet generálhat.
Ha egy alkalmazás szelektíven használ fel néhány mutatóbemenetet, és a többit átadja a DefWindowProc, az eredményül kapott viselkedés nincs meghatározva.
A GetPointerInfo függvénnyel további információkat kérhet le az üzenettel kapcsolatban.
Ha az alkalmazás nem dolgozza fel olyan gyorsan ezeket az üzeneteket, mint amilyen gyorsan létrejönnek, előfordulhat, hogy egyes lépések elszenesednek. Az üzenetbe beszúrt bemenetek előzményei lekérhetők a GetPointerInfoHistory függvénnyel.
Példák
Az alábbi példakód bemutatja, hogyan használható GET_X_LPARAM, GET_Y_LPARAM, IS_POINTER_FIRSTBUTTON_WPARAMés IS_POINTER_SECONDBUTTON_WPARAM a releváns információk lekérésére a WM_POINTERUPDATE üzenet wParam és lParam paramétereiből.
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
}
Az alábbi példakód bemutatja, hogyan használható GET_POINTERID_WPARAM a mutatóazonosító lekérésére az WM_POINTERUPDATE üzenet wParam paraméteréből.
POINTER_INFO pointerInfo;
UINT32 pointerId = GET_POINTERID_WPARAM(wParam);
// Retrieve common pointer information
if (!GetPointerInfo(pointerId, &pointerInfo))
{
// failure, call GetLastError()
}
else
{
// success, process pointerInfo
}
Az alábbi példakód bemutatja, hogyan kezelhetők a különböző mutatótípusok.
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;
}
Követelmények
Követelmény | Érték |
---|---|
Minimálisan támogatott ügyfél |
Windows 8 [csak asztali alkalmazások] |
Minimálisan támogatott kiszolgáló |
Windows Server 2012 [csak asztali alkalmazások] |
Fejléc |
|
Lásd még:
-
referencia