Aracılığıyla paylaş


WM_POINTERUP iletisi

Bir pencerenin istemci alanı üzerinde kişi yapan bir işaretçi kişiyi kırdığında postalanır. Bu giriş iletisi, işaretçinin kişi yaptığı pencereyi hedefler ve işaretçi bu noktada pencereye örtük olarak yakalanır, böylece pencere, kişiyi kırana kadar işaretçi için WM_POINTERUP bildirimi de dahil olmak üzere giriş iletilerini almaya devam eder.

Bir pencere bu iletiyi WindowProc işlevi aracılığıyla alır.

! [Önemli]
Masaüstü uygulamaları DPI'ye duyarlı olmalıdır. Uygulamanız DPI farkında değilse, DPI sanallaştırması nedeniyle işaretçi iletilerinde ve ilgili yapılarda bulunan ekran koordinatları yanlış görünebilir. DPI sanallaştırma, DPI farkında olmayan ve varsayılan olarak etkin olan uygulamalara otomatik ölçeklendirme desteği sağlar (kullanıcılar bunu kapatabilir). Daha fazla bilgi için bkz. Yazma High-DPI Win32 Uygulamaları.

#define WM_POINTERUP                  0x0247

Parametre

wParam

İşaretçi hakkında bilgi içerir. wParam parametresinden bilgi almak için aşağıdaki makroları kullanın.

  • GET_POINTERID_WPARAM(wParam): işaretçi tanımlayıcısı.

  • IS_POINTER_NEW_WPARAM(wParam): bu iletinin yeni bir işaretçi tarafından oluşturulan ilk girişi temsil edip etmediğini gösteren bir bayrak.

  • IS_POINTER_INRANGE_WPARAM(wParam): Bu iletinin ömrü boyunca bir işaretçi tarafından oluşturulup oluşturulmadığını gösteren bir bayrak. bu bayrak, işaretçinin sol algılama aralığına sahip olduğunu belirten iletilerde ayarlanmadı

  • IS_POINTER_INCONTACT_WPARAM(wParam): Bu iletinin pencere yüzeyiyle temas eden bir işaretçi tarafından oluşturulup oluşturulmadığını gösteren bayrak. Bu bayrak, üzerine gelinen işaretçiyi gösteren iletilerde ayarlanmadı.

  • IS_POINTER_PRIMARY_WPARAM(wParam): bu işaretçinin birincil olarak atandığını gösterir.

  • IS_POINTER_FIRSTBUTTON_WPARAM(wParam): Birincil eylem olup olmadığını gösteren bir bayrak.

    • Bu, farenin sol düğmesinin aşağısına benzer.
    • Dokunmatik işaretçi, dijitalleştirici yüzeyiyle temas halindeyken bu ayara sahip olur.
    • Kalem işaretçisi, basılmış düğme olmadan dijitalleştirici yüzeyiyle temas halindeyken bu ayara sahip olur.
  • IS_POINTER_SECONDBUTTON_WPARAM(wParam): İkincil bir eylem olup olmadığını gösteren bir bayrak.

    • Bu, farenin sağ düğmesinin aşağısına benzer.
    • Kalem işaretçisi, kalem varil düğmesine basılıyken dijitalleştirici yüzeyiyle temas halindeyken bu ayara sahip olur.
  • IS_POINTER_THIRDBUTTON_WPARAM(wParam): işaretçi türüne göre bir veya daha fazla üçüncül eylem olup olmadığını gösteren bir bayrak; üçüncül eylemlere yanıt vermek isteyen uygulamalar, hangi üçüncül düğmelere basıldığını belirlemek için işaretçi türüne özgü bilgileri almalıdır. Örneğin bir uygulama, GetPointerPenInfo çağırarak ve düğme durumlarını belirten bayrakları inceleyerek kalemin düğme durumlarını belirleyebilir.

  • IS_POINTER_FOURTHBUTTON_WPARAM(wParam): Belirtilen işaretçinin dördüncü eylemi yapıp yapmadığını gösteren bir bayrak. Dördüncü eylemlere yanıt vermek isteyen uygulamaların, ilk genişletilmiş fare (XButton1) düğmesine basılıp basılamadığını belirlemek için işaretçi türüne özgü bilgileri alması gerekir.

  • IS_POINTER_FIFTHBUTTON_WPARAM(wParam): belirtilen işaretçinin beşinci eylemi yapıp yapmadığını gösteren bayrağı. Beşinci eylemlere yanıt vermek isteyen uygulamaların, ikinci genişletilmiş fare (XButton2) düğmesine basılıp basılamadığını belirlemek için işaretçi türüne özgü bilgileri alması gerekir.

    Diğer ayrıntılar için bkz. İşaretçi Bayrakları.

    Not

    Üzerine gelinen işaretçide düğme bayraklarının hiçbiri ayarlanmadı. Bu, fare düğmesi olmayan fare hareketine benzer. Uygulama, örneğin getPointerPenInfoçağırarak ve düğme durumlarını belirten bayrakları inceleyerek, üzerine gelinen kalemin düğme durumlarını belirleyebilir.

lParam

İşaretçinin nokta konumunu içerir.

Not

İşaretçi önemsiz olmayan bir alan üzerinden cihazla iletişim kurabileceğinden, bu nokta konumu daha karmaşık bir işaretçi alanının basitleştirilmesi olabilir. Mümkün olduğunda, bir uygulama nokta konumu yerine tam işaretçi alanı bilgilerini kullanmalıdır.

Noktanın fiziksel ekran koordinatlarını almak için aşağıdaki makroları kullanın.

Dönüş değeri

Bir uygulama bu iletiyi işlerse sıfır döndürmelidir.

Uygulama bu iletiyi işlemezse, DefWindowProcçağırmalıdır.

Açıklamalar

! [Önemli]
Bir pencere bir işaretçinin yakalanmasını kaybettiğinde ve WM_POINTERCAPTURECHANGED bildirimini aldığında, genellikle başka bildirim almaz. Bu nedenle, eşit olarak eşleştirilmiş WM_POINTERDOWN/WM_POINTERUP veya WM_POINTERENTER/WM_POINTERLEAVE bildirimlerine dayalı hiçbir varsayımda bulunmamanız önemlidir.

Her işaretçinin ömrü boyunca benzersiz bir işaretçi tanımlayıcısı vardır. bir işaretçinin ömrü ilk algılandığında başlar.

Üzerine gelinen işaretçi algılanırsa bir WM_POINTERENTER iletisi oluşturulur. Üzerine gelinemeyen bir işaretçi algılanırsa bir WM_POINTERDOWN iletisi ve ardından bir WM_POINTERENTER iletisi oluşturulur.

Bir işaretçi, yaşam süresi boyunca, üzerine gelindiğinde veya iletişimdeyken bir dizi WM_POINTERUPDATE iletisi oluşturabilir.

İşaretçinin ömrü, artık algılanamadıklarında sona erer. Bu, bir WM_POINTERLEAVE iletisi oluşturur.

İşaretçi durdurulduğunda POINTER_FLAG_CANCELED ayarlanır.

Yakalanamayan bir işaretçi bir pencerenin sınırlarının dışına çıktığında da WM_POINTERLEAVE iletisi oluşturulabilir.

İşaretçinin yatay ve dikey konumunu elde etmek için aşağıdakileri kullanın:

Yatay ve dikey konumu elde etmek için aşağıdaki kodu kullanın:

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

MAKEPOINTS makro, lParam parametresini POINTS yapısına dönüştürmek için de kullanılabilir.

GetKeyState işlevi, bu iletiyle ilişkili klavye değiştirici tuş durumlarını belirlemek için kullanılabilir. Örneğin, ALT tuşuna basıldığını algılamak için GetKeyState (VK_MENU)0 < denetleyin.

Uygulama bu iletiyi işlemezse, DefWindowProc bir veya daha fazla WM_GESTUREiletisi oluşturabilir. Bir hareket tanınmıyorsa, DefWindowProc fare girişi oluşturabilir.

Bir uygulama seçmeli olarak bazı işaretçi girişi kullanır ve geri kalanını DefWindowProciletirse, sonuçta elde edilen davranış tanımlanmamış olur.

Bu iletiyle ilgili daha fazla bilgi almak için GetPointerInfo işlevini kullanın.

Örnekler

Aşağıdaki kod örneği, bu iletiyle ilişkilendirilmiş işaretçinin x ve y konumunun nasıl alınıp alınamediğini gösterir.

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

// process pointer up, similar to mouse button up

Aşağıdaki kod örneği, bu iletiyle ilişkilendirilmiş işaretçi kimliğinin nasıl alınacaklarını gösterir.

POINTER_INFO pointerInfo;
UINT32       pointerId = GET_POINTERID_WPARAM(wParam);

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


Aşağıdaki kod örneği, bu iletiyle ilişkili farklı işaretçi türlerinin nasıl işleneceğini gösterir.

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

Gereksinim -leri

Gereksinim Değer
Desteklenen en düşük istemci
Windows 8 [yalnızca masaüstü uygulamaları]
Desteklenen en düşük sunucu
Windows Server 2012 [yalnızca masaüstü uygulamaları]
Üstbilgi
Winuser.h (Windows.h dahil)

Ayrıca bkz.

İletileri

Başvuru

İşaretçi Bayrakları

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