Aracılığıyla paylaş


WM_POINTERUPDATE iletisi

Bir pencerenin istemci alanı üzerinde veya pencerenin istemci alanının üzerine getirilmemiş bir işaretçi üzerinde iletişim kuran bir işaretçide güncelleştirme sağlamak için postalandı. İşaretçi vurgulanırken, ileti işaretçinin üzerinde olduğu pencereyi hedefler. İşaretçi yüzeyle temas halindeyken işaretçi, işaretçinin temas ettiği pencereye örtük olarak yakalanır ve bu pencere, kişi bozulana kadar işaretçi için giriş almaya devam eder.

! [Ö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_POINTERUPDATE              0x0245

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

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 kişideyken 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:

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_GESTURE iletisi 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.

Uygulama bu iletileri oluşturuldukları kadar hızlı işlemezse, bazı taşımalar birleştirilebilir. Bu iletiyle birleştirilmiş girişlerin geçmişi GetPointerInfoHistory işlevi kullanılarak alınabilir.

Örnekler

Aşağıdaki kod örneğinde, WM_POINTERUPDATE iletisinin wParam ve lParam parametrelerinden ilgili bilgileri almak için GET_X_LPARAM, GET_Y_LPARAM, IS_POINTER_FIRSTBUTTON_WPARAMve IS_POINTER_SECONDBUTTON_WPARAM nasıl kullanılacağı gösterilmektedir.

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
}

Aşağıdaki kod örneğinde, WM_POINTERUPDATE iletisinin wParam parametresinden işaretçi kimliğini almak için GET_POINTERID_WPARAM nasıl kullanılacağı gösterilmektedir.

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
}

Aşağıdaki kod örneği, 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_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;
}

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