Megosztás a következőn keresztül:


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.

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, &amp;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
Winuser.h (a Windows.h is)

Lásd még:

Üzenetek

referencia

mutatójelölők

GET_POINTERID_WPARAM

IS_POINTER_NEW_WPARAM

IS_POINTER_INRANGE_WPARAM

IS_POINTER_INCONTACT_WPARAM

IS_POINTER_PRIMARY_WPARAM

IS_POINTER_FIRSTBUTTON_WPARAM

IS_POINTER_SECONDBUTTON_WPARAM

IS_POINTER_THIRDBUTTON_WPARAM

IS_POINTER_FOURTHBUTTON_WPARAM

IS_POINTER_FIFTHBUTTON_WPARAM