WM_POINTERDOWN üzenet
Közzétéve, ha egy mutató az ablak ügyfélterületén keresztül lép kapcsolatba. Ez a bemeneti üzenet arra az ablakra irányul, amelyen a mutató kapcsolatba lép, és a mutató implicit módon rögzítve lesz az ablakba, így az ablak továbbra is megkapja a kurzor bemeneté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_POINTERDOWN 0x0246
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. Egy WM_POINTERDOWN üzenet, majd egy WM_POINTERENTER üzenet jön létre, ha a rendszer 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:
xPos = GET_X_LPARAM(lParam);
yPos = GET_Y_LPARAM(lParam);
Az lParam paraméter PONT) struktúrává alakításához használja a MAKEPOINTS makrót.
Az üzenethez kapcsolódó további információk lekéréséhez használja a GetPointerInfo függvényt.
Az üzenethez társított billentyűzetmódosító kulcsállapotok meghatározásához használja a GetKeyState függvényt. Ha például az ALT billentyű lenyomását szeretné észlelni, ellenőrizze, hogy a GetKeyState(VK_MENU) 0 <-e.
Vegye figyelembe, hogy 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ó sor 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.
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 egy ablak ne tegyen feltételezéseket a mutató állapotáról, függetlenül attól, hogy egyenletesen párosított DOWN/UP vagy ENTER/LEAVE értesítéseket kap-e.
Példák
Az alábbi példakód bemutatja, hogyan használható IS_POINTER_FIRSTBUTTON_WPARAM, GET_X_LPARAM, GET_Y_LPARAMés IS_POINTER_SECONDBUTTON_WPARAMaz WM_POINTERDOWN üzenethez kapcsolódó releváns információk lekéréséhez.
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
}
Az alábbi kódpéldából megtudhatja, hogyan kérdezheti le a mutatóazonosítót a WM_POINTERDOWN üzenetből GET_POINTERID_WPARAM.
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 kezelheti a különböző mutatótípusokat, például az érintést, a tollat vagy az alapértelmezett mutatóeszközöket.
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