Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
kullanıcı, imleç bir pencerenin istemci alanının üzerindeyken fare düğmesine tıklarsa, pencere aşağıdaki iletilerden birini alır.
| İleti | Anlam |
|---|---|
| WM_LBUTTONDOWN | Sol düğme aşağı |
| WM_LBUTTONUP | Sol düğme yukarı |
| WM_MBUTTONDOWN | Orta düğme aşağı |
| WM_MBUTTONUP | Orta düğme yukarı |
| WM_RBUTTONDOWN | Sağ düğme aşağı |
| WM_RBUTTONUP | Sağ düğme yukarı |
| WM_XBUTTONDOWN | XBUTTON1 veya XBUTTON2 basılı |
| WM_XBUTTONUP | XBUTTON1 veya XBUTTON2 yukarı |
İstemci alanının pencerenin çerçevesiz bölümü olduğunu hatırlayın. İstemci alanları hakkında daha fazla bilgi için bkz. Pencere Nedir?
Fare Koordinatları
Bu iletilerin tümlerinde lParam parametresi, fare işaretçisinin x ve y koordinatlarını içerir. en düşük 16 bit lParam x koordinatını, sonraki 16 bit ise y koordinatını içerir. lParamkoordinatlarını açmak için GET_X_LPARAM ve GET_Y_LPARAM makrolarını kullanın.
int xPos = GET_X_LPARAM(lParam);
int yPos = GET_Y_LPARAM(lParam);
Bu makrolar WindowsX.h üst bilgi dosyasında tanımlanır.
64 bit Windows'ta lParam 64 bit değerdir. lParam'ın üst 32 biti kullanılmaz. Windows belgelerinde "düşük sıralı sözcük" ve "yüksek sıralı sözcük" ifadeleri lParam için geçtiğinde, 64-bitlik durumda bu, alt 32 bitin düşük ve yüksek sıralı sözcükleri anlamına gelir. Makrolar doğru değerleri ayıklar, bu nedenle bunları kullanırsanız güvende olursunuz.
Fare koordinatları cihazdan bağımsız piksellerle (DIP) değil piksel cinsinden verilir ve pencerenin istemci alanına göre ölçülür. Koordinatlar imzalı değerlerdir. İstemci alanının üstündeki ve solundaki konumların negatif koordinatları vardır. Bu, farenin pencerenin dışındaki konumunu izlemeniz durumunda önemlidir. Bunu daha sonraki bir konu başlığında göreceğiz, Pencere Dışında Fare Hareketini Yakalama.
Ek Bayraklar
wParam parametresi, diğer fare düğmelerinin ve SHIFT ve CTRL tuşlarının durumunu gösteren bit düzeyinde bir VEYA bayrak içerir.
| Bayrak | Anlam |
|---|---|
| MK_CONTROL | CTRL tuşu çalışmıyor. |
| MK_LBUTTON | Sol fare düğmesi çalışmıyor. |
| MK_MBUTTON | Ortadaki fare düğmesi çalışmıyor. |
| MK_RBUTTON | Sağ fare düğmesi çalışmıyor. |
| MK_SHIFT | SHIFT tuşu çalışmıyor. |
| MK_XBUTTON1 | XBUTTON1 düğmesi çalışmıyor. |
| MK_XBUTTON2 | XBUTTON2 düğmesi çalışmıyor. |
Bayrağın olmaması, ilgili düğmeye veya tuşa basılmadığını gösterir. Örneğin, CTRL tuşunun basılı olup olmadığını test etmek için:
if (wParam & MK_CONTROL) { ...
CTRL ve SHIFT dışındaki diğer tuşların durumunu bulmanız gerekiyorsa, Klavye Girişi'nde açıklanan GetKeyStateişlevini kullanın.
WM_XBUTTONDOWN ve WM_XBUTTONUP pencere iletileri hem XBUTTON1 hem de XBUTTON2 için geçerlidir. wParam parametresi hangi düğmeye tıklandığını gösterir.
UINT button = GET_XBUTTON_WPARAM(wParam);
if (button == XBUTTON1)
{
// XBUTTON1 was clicked.
}
else if (button == XBUTTON2)
{
// XBUTTON2 was clicked.
}
Çift Tıklama
Pencere varsayılan olarak çift tıklama bildirimleri almaz. Çift tıklama almak için, pencere sınıfını kaydederken WNDCLASS yapısında CS_DBLCLKS bayrağını ayarlayın.
WNDCLASS wc = { };
wc.style = CS_DBLCLKS;
/* Set other structure members. */
RegisterClass(&wc);
CS_DBLCLKS bayrağını gösterildiği gibi ayarlarsanız pencere çift tıklama bildirimleri alır. Çift tıklama, adında "DBLCLK" bulunan bir pencere iletisiyle gösterilir. Örneğin, sol fare düğmesine çift tıklamak aşağıdaki ileti dizisini oluşturur:
Aslında, normalde oluşturulacak ikinci WM_LBUTTONDOWN iletisi WM_LBUTTONDBLCLK bir iletiye dönüşür. Sağ, orta ve XBUTTON düğmeleri için eşdeğer iletiler tanımlanır.
Çift tıklama iletisini alıncaya kadar, ilk fare tıklamasının çift tıklamanın başlangıcı olduğunu anlamanın hiçbir yolu yoktur. Bu nedenle, çift tıklama eylemi ilk fare tıklamasıyla başlayan bir eyleme devam etmelidir. Örneğin, Windows Kabuğu'nda tek tıklamayla bir klasör seçilirken çift tıklama klasörü açar.
Müşteri Dışı Fare Mesajları
Pencerenin istemci olmayan alanında gerçekleşen fare olayları için ayrı bir ileti kümesi tanımlanır. Bu iletilerin adında "NC" harfleri bulunur. Örneğin, WM_NCLBUTTONDOWN, WM_LBUTTONDOWNişleminin istemci dışı karşılığıdır. DefWindowProc işlevi bu iletileri doğru işlediğinden tipik bir uygulama bu iletileri kesmez. Ancak, bazı gelişmiş işlevler için yararlı olabilir. Örneğin, başlık çubuğunda özel davranış uygulamak için bu iletileri kullanabilirsiniz. Bu iletileri işlerseniz, bunları genellikle DefWindowProc'e geçirmeniz önerilir. Aksi takdirde, uygulamanız pencereyi sürükleme veya en aza indirme gibi standart işlevleri bozar.
Sonraki