WM_POINTERUP üzenet
Akkor lett közzétéve, ha egy olyan mutató, amely egy ablak ügyfélterületén keresztül hozta létre a névjegyet, megszakítja a névjegyet. Ez a bemeneti üzenet arra az ablakra irányul, amelyen az egérmutató kapcsolatba lép, és a mutató ekkor implicit módon rögzítve van az ablakban, így az ablak továbbra is megkapja a bemeneti üzeneteket, beleértve a mutató WM_POINTERUP értesítését, amíg meg nem szakítja a kapcsolatot.
Az ablak a WindowProc függvényen keresztül kapja meg ezt az üzenetet.
! [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_POINTERUP 0x0247
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
! [Fontos]
Ha egy ablak elveszíti a mutató rögzítését, és megkapja a WM_POINTERCAPTURECHANGED értesítést, általában nem kap további értesítéseket. Ezért fontos, hogy ne tegyen feltételezéseket egyenletesen párosított WM_POINTERDOWN/WM_POINTERUP vagy WM_POINTERENTER/WM_POINTERLEAVE értesítések alapján.
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ó élettartama során WM_POINTERUPDATE üzenetek sorozatát hozhatja létre, miközben rámutat vagy érintkezik.
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:
A vízszintes és a függőleges pozíció beolvasásához használja a következő kódot:
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- <.
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.
Példák
Az alábbi példakód bemutatja, hogyan kérhető le az üzenethez társított mutató x és y pozíciója.
int xPos = GET_X_LPARAM(lParam);
int yPos = GET_Y_LPARAM(lParam);
// process pointer up, similar to mouse button up
Az alábbi példakód bemutatja, hogyan szerezheti be az üzenethez társított mutatóazonosítót.
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 az üzenethez társított 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_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;
}
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