Sdílet prostřednictvím


WM_POINTERUP zpráva

Publikováno, když ukazatel, který kontakt přes oblast klienta okna přeruší kontakt. Tato vstupní zpráva cílí na okno, nad kterým ukazatel kontaktuje a ukazatel je v tomto okamžiku implicitně zachycen do okna, aby okno nadále přijímalo vstupní zprávy, včetně WM_POINTERUP oznámení pro ukazatel, dokud nepřeruší kontakt.

Okno obdrží tuto zprávu prostřednictvím funkce WindowProc.

! [Důležité]
Desktopové aplikace by měly být v rozlišení DPI. Pokud vaše aplikace nezná DPI, můžou se souřadnice obrazovky obsažené ve zprávách ukazatelů a souvisejících strukturách zobrazovat nepřesně kvůli virtualizaci DPI. Virtualizace DPI poskytuje podporu automatického škálování pro aplikace, které nepodporují DPI a jsou ve výchozím nastavení aktivní (uživatelé ho můžou vypnout). Další informace naleznete v tématu Psaní High-DPI aplikace Win32.

#define WM_POINTERUP                  0x0247

Parametry

wParam

Obsahuje informace o ukazateli. K načtení informací z parametru wParam použijte následující makra.

  • GET_POINTERID_WPARAM(wParam): identifikátor ukazatele.

  • IS_POINTER_NEW_WPARAM(wParam): příznak, který označuje, zda tato zpráva představuje první vstup vygenerovaný novým ukazatelem.

  • IS_POINTER_INRANGE_WPARAM(wParam): příznak, který označuje, jestli byla tato zpráva generována ukazatelem během své životnosti. Tento příznak není nastavený u zpráv, které indikují, že ukazatel má levý rozsah detekce.

  • IS_POINTER_INCONTACT_WPARAM(wParam): Příznak označující, jestli byla tato zpráva generována ukazatelem, který je v kontaktu s povrchem okna. Tento příznak není nastaven u zpráv, které označují ukazatel myši.

  • IS_POINTER_PRIMARY_WPARAM(wParam): označuje, že tento ukazatel byl označen jako primární.

  • IS_POINTER_FIRSTBUTTON_WPARAM(wParam): příznak označující, jestli existuje primární akce.

    • To je analogické s levým tlačítkem myši dolů.
    • Ukazatel dotykového ovládání bude mít tuto sadu, když je v kontaktu s povrchem digitizátoru.
    • Ukazatel pera bude mít tuto sadu, když je v kontaktu s povrchem digitizátoru bez stisknutí tlačítek.
  • IS_POINTER_SECONDBUTTON_WPARAM(wParam): příznak, který označuje, jestli existuje sekundární akce.

    • To je analogické s pravým tlačítkem myši dolů.
    • Ukazatel pera bude mít tuto sadu, když je v kontaktu s povrchem digitizátoru s stisknutím tlačítka pera.
  • IS_POINTER_THIRDBUTTON_WPARAM(wParam): příznak, který označuje, zda existuje jedna nebo více terciárních akcí na základě typu ukazatele; aplikace, které chtějí reagovat na terciární akce, musí načíst informace specifické pro typ ukazatele, aby bylo možné určit, která terciární tlačítka jsou stisknuta. Aplikace může například určit stavy tlačítek pera voláním GetPointerPenInfo a zkoumáním příznaků, které určují stavy tlačítek.

  • IS_POINTER_FOURTHBUTTON_WPARAM(wParam): příznak označující, jestli zadaný ukazatel provedl čtvrtou akci. Aplikace, které chtějí reagovat na čtvrté akce, musí načíst informace specifické pro typ ukazatele, aby bylo možné určit, zda je stisknuto první rozšířené tlačítko myši (XButton1).

  • IS_POINTER_FIFTHBUTTON_WPARAM(wParam): příznak označující, jestli zadaný ukazatel provedl pátou akci. Aplikace, které chtějí reagovat na páté akce, musí načíst informace specifické pro typ ukazatele a určit, zda je stisknuto druhé rozšířené tlačítko myši (XButton2).

    Další podrobnosti najdete v příznaky ukazatele.

    Poznámka

    Ukazatel při najetí myší nemá žádný z nastavených příznaků tlačítek. To je analogické k pohybu myší bez tlačítek myši dolů. Aplikace může určit stavy tlačítek pera pro najetí myší, například voláním GetPointerPenInfo a prozkoumáním příznaků, které určují stavy tlačítek.

lParam

Obsahuje umístění bodu ukazatele.

Poznámka

Vzhledem k tomu, že ukazatel může spojit se zařízením přes nesouvisenou oblast, může být toto umístění bodu zjednodušením složitější oblasti ukazatele. Kdykoli je to možné, aplikace by měla místo umístění bodu použít úplné informace o oblasti ukazatele.

Pomocí následujících maker načtěte souřadnice fyzické obrazovky bodu.

Návratová hodnota

Pokud aplikace tuto zprávu zpracuje, měla by vrátit nulu.

Pokud aplikace tuto zprávu nezpracuje, měla by volat DefWindowProc.

Poznámky

! [Důležité]
Když okno ztratí zachycení ukazatele a obdrží oznámení WM_POINTERCAPTURECHANGED, obvykle neobdrží žádná další oznámení. Z tohoto důvodu je důležité, abyste neprováděli žádné předpoklady na základě rovnoměrně spárovaných WM_POINTERDOWN/WM_POINTERUP nebo WM_POINTERENTER/WM_POINTERLEAVE oznámení.

Každý ukazatel má během své životnosti jedinečný identifikátor ukazatele. Doba života ukazatele začíná při prvním zjištění.

Pokud se zjistí ukazatel myši, vygeneruje se WM_POINTERENTER zpráva. WM_POINTERDOWN zpráva následovaná WM_POINTERENTER zprávou se vygeneruje, pokud se zjistí ukazatel, který není najet myší.

Během své životnosti může ukazatel vygenerovat řadu WM_POINTERUPDATE zpráv, když je najet myší nebo v kontaktu.

Doba života ukazatele skončí, když se už nezjistí. Tím se vygeneruje WM_POINTERLEAVE zpráva.

Když je ukazatel přerušen, POINTER_FLAG_CANCELED je nastaven.

Zpráva WM_POINTERLEAVE může být vygenerována také v případech, kdy se nezaznamenaný ukazatel přesune mimo hranice okna.

Chcete-li získat vodorovnou a svislou pozici ukazatele, použijte následující:

K získání vodorovné a svislé pozice použijte následující kód:

xPos = GET_X_LPARAM(lParam); 
yPos = GET_Y_LPARAM(lParam);

Makro MAKEPOINTS lze také použít k převodu parametru lParam na POINTS struktury.

Funkci GetKeyState lze použít k určení stavů modifikátoru klávesnice přidružených k této zprávě. Pokud chcete například zjistit, že se stiskla klávesa ALT, zkontrolujte, jestli GetKeyState(VK_MENU) < 0.

Pokud aplikace tuto zprávu nezpracuje, DefWindowProc může vygenerovat jednu nebo více WM_GESTUREzpráv, pokud sekvence vstupu z tohoto a případně i jiné ukazatele jsou rozpoznány jako gesto. Pokud gesto není rozpoznáno, defWindowProc může generovat vstup myši.

Pokud aplikace selektivně spotřebovává určitý vstup ukazatele a předá zbytek DefWindowProc, výsledné chování není definováno.

Pomocí funkce GetPointerInfo načtěte další informace související s touto zprávou.

Příklady

Následující příklad kódu ukazuje, jak načíst pozici x a y ukazatele přidruženého k této zprávě.

int xPos = GET_X_LPARAM(lParam);
int yPos = GET_Y_LPARAM(lParam);

// process pointer up, similar to mouse button up

Následující příklad kódu ukazuje, jak získat ID ukazatele přidružené k této zprávě.

POINTER_INFO pointerInfo;
UINT32       pointerId = GET_POINTERID_WPARAM(wParam);

// Retrieve common pointer information
if (!GetPointerInfo(pointerId, &pointerInfo))
{
    
// failure, call GetLastError()
}
else
{
    // success, process pointerInfo
}


Následující příklad kódu ukazuje, jak zpracovat různé typy ukazatelů přidružené k této zprávě.

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;
}

Požadavky

Požadavek Hodnota
Minimální podporovaný klient
Windows 8 [pouze desktopové aplikace]
Minimální podporovaný server
Windows Server 2012 [jenom desktopové aplikace]
Záhlaví
Winuser.h (včetně Windows.h)

Viz také

zprávy

referenční

příznaky ukazatele

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