Fare Girişe Genel Bakış
Fare, uygulamalar için önemli, ancak isteğe bağlı bir kullanıcı girişi cihazıdır. İyi yazılmış bir uygulama bir fare arabirimi içermelidir, ancak yalnızca kullanıcı girişi almak için fareye bağımlı olmamalıdır. Uygulama tam klavye desteği de sağlamalıdır.
Bir uygulama, pencerelerine gönderilen veya gönderilen iletiler biçiminde fare girişi alır.
Bu bölümde aşağıdaki konular ele alınır:
- fare imleci
- fare yakalama
- Fare Tıklama Kilidi
- fare yapılandırması
- XBUTTON
- Fare İletileri
- İstemci Alanı Fare İletileri
- İstemci Olmayan Alan Fare İletileri
- WM_NCHITTEST İleti
- fare sonar
- Mouse Vanish
- Fare Tekerleği
- Pencere Etkinleştirme
Fare İmleci
Kullanıcı fareyi hareket ettirdiğinde, sistem ekranda fare imleciadlı bir bit eşlem taşır. Fare imleci, sistemin izlediği ve imlecin konumu olarak tanıdığı etkin noktaadlı tek piksellik bir nokta içerir. Bir fare olayı gerçekleştiğinde, etkin noktayı içeren pencere genellikle olaydan kaynaklanan fare iletisini alır. Pencerenin etkin olması veya fare iletisi almak için klavye odağına sahip olması gerekmez.
Sistem, fare hızını denetleen bir değişken tutar; yani kullanıcı fareyi hareket ettirdiğinde imlecin hareket mesafesi. Fare hızını almak veya ayarlamak için SPI_GETMOUSE veya SPI_SETMOUSE bayrağıyla SystemParametersInfo işlevini kullanabilirsiniz. Fare imleçleri hakkında daha fazla bilgi için bkz. İmleçler.
Fare Yakalama
Sistem genellikle bir fare olayı gerçekleştiğinde imlecin etkin noktasını içeren pencereye bir fare iletisi iletir. Bir uygulama, fare iletilerini belirli bir pencereye yönlendirmek için SetCapture işlevini kullanarak bu davranışı değiştirebilir. Uygulama ReleaseCapture işlevini çağırana veya başka bir yakalama penceresi belirtene kadar veya kullanıcı başka bir iş parçacığı tarafından oluşturulan bir pencereye tıklayana kadar pencere tüm fare iletilerini alır.
Fare yakalama değiştiğinde, sistem pencereye fare yakalamayı kaybeden bir WM_CAPTURECHANGED iletisi gönderir. İletinin lParam parametresi, fare yakalamayı alan pencere tutamacını belirtir.
Fare girişini yalnızca ön plan penceresi yakalayabilir. Bir arka plan penceresi fare girişini yakalamaya çalıştığında, yalnızca imlecin etkin noktası pencerenin görünür kısmı içinde olduğunda gerçekleşen fare olayları için iletiler alır.
İmleç pencerenin dışına çıktığında bile bir pencerenin tüm fare girişini alması gerekiyorsa fare girişini yakalamak yararlı olur. Örneğin, bir uygulama genellikle bir fare düğmesi aşağı olayından sonra imlecin konumunu izler ve bir fare düğmesi yukarı olayı gerçekleşene kadar imleci izler. Bir uygulama fare girişini yakalamadıysa ve kullanıcı fare düğmesini pencerenin dışında bırakırsa, pencere düğme açma iletisini almaz.
bir iş parçacığı, pencerelerinden birinin fareyi yakalayıp yakalamadığını belirlemek için GetCaptureişlevinikullanabilir. İş parçacığının pencerelerinden biri fareyi yakaladıysa, GetCapture pencereye bir tutamaç alır.
Fare Tıklama Kilidi
Fare Tıklama Kilidi erişilebilirlik özelliği, kullanıcının tek bir tıklamadan sonra birincil fare düğmesini kilitlemesini sağlar. Bir uygulamada düğmeye yine de basılmış gibi görünür. Düğmenin kilidini açmak için bir uygulama herhangi bir fare iletisi gönderebilir veya kullanıcı herhangi bir fare düğmesine tıklayabilir. Bu özellik, kullanıcının karmaşık fare bileşimlerini daha basit bir şekilde yapmasını sağlar. Örneğin, belirli fiziksel sınırlamaları olanlar metni vurgulayabilir, nesneleri sürükleyebilir veya menüleri daha kolay açabilir. Daha fazla bilgi için aşağıdaki bayraklara ve SystemParametersInfoiçindeki Açıklamalar'a bakın:
- SPI_GETMOUSECLICKLOCK
- SPI_SETMOUSECLICKLOCK
- SPI_GETMOUSECLICKLOCKTIME
- SPI_SETMOUSECLICKLOCKTIME
Fare Yapılandırması
Fare uygulamalar için önemli bir giriş cihazı olsa da, her kullanıcının mutlaka bir faresi olması gerekmez. Uygulama, SM_MOUSEPRESENT değerini GetSystemMetrics işlevine geçirerek sistemin fare içerip içermediğini belirleyebilir.
Windows, en fazla üç düğme içeren bir fareyi destekler. Üç düğmeli bir farede düğmeler sol, orta ve sağ düğmeler olarak belirlenir. Fare düğmeleriyle ilgili iletiler ve adlandırılmış sabitler, düğmeleri tanımlamak için L, M ve R harflerini kullanır. Tek düğmeli faredeki düğme, sol düğme olarak kabul edilir. Windows birden çok düğme içeren bir fareyi desteklese de, çoğu uygulama öncelikle sol düğmeyi, varsa diğerlerini ise en az düzeyde kullanır.
Uygulamalar fare tekerleğini de destekleyebilir. Fare tekerleği basılabilir veya döndürülebilir. Fare tekerleğine basıldığında, uygulamanıza normal orta düğme iletileri göndererek orta (üçüncü) düğme işlevi görür. Döndürüldüğünde, uygulamanıza bir tekerlek iletisi gönderilir. Daha fazla bilgi için Fare Tekerleği bölümüne bakın.
Uygulamalar, uygulama komut düğmelerini destekleyebilir. XBUTTON1 veya XBUTTON2 olarak adlandırılan bu düğmeler, İnternet tarayıcısına, elektronik postalara ve medya hizmetlerine daha kolay erişim sağlamak için tasarlanmıştır. XBUTTON1 veya XBUTTON2 basıldığında, uygulamanıza bir WM_APPCOMMAND iletisi gönderilir. Daha fazla bilgi için WM_APPCOMMAND iletisindeki açıklamaya bakın.
Uygulama, SM_CMOUSEBUTTONS değerini GetSystemMetrics işlevine geçirerek faredeki düğme sayısını belirleyebilir. Fareyi sol elle kullanılan bir kullanıcı için yapılandırmak için uygulama, sol ve sağ fare düğmelerinin anlamını tersine çevirmek için SwapMouseButton işlevini kullanabilir. SPI_SETMOUSEBUTTONSWAP değerini SystemParametersInfo işlevine geçirmek, düğmelerin anlamını tersine çevirmenin başka bir yoludur. Ancak farenin paylaşılan bir kaynak olduğuna dikkat edin, bu nedenle düğmelerin anlamını tersine çevirme tüm uygulamaları etkiler.
XBUTTON'lar
Windows beş düğmeye kadar fareleri destekler: sol, orta ve sağ, ayrıca XBUTTON1 ve XBUTTON2 adlı iki ek düğme. XBUTTON1 ve XBUTTON2 düğmeleri genellikle farenin kenarlarında, tabanın yakınında bulunur. Bu ek düğmeler tüm farelerde mevcut değildir. Varsa, XBUTTON1 ve XBUTTON2 düğmeleri genellikle web tarayıcısında ileri ve geri gezinti gibi bir uygulama işlevine eşlenir.
Pencere yöneticisi, WM_XBUTTON* ve WM_NCXBUTTON* iletileri aracılığıyla XBUTTON1 ve XBUTTON2 destekler. Bu iletilerdeki WPARAM HIWORD, hangi XBUTTON tuşuna basıldığını gösteren bir bayrak içerir. Bu fare iletileri WM_MOUSEFIRST ve WM_MOUSELASTsabitleri arasına da sığdığından, uygulama getmessageveya PeekMessageile tüm fare iletilerini filtreleyebilir.
Aşağıdaki destek XBUTTON1 ve XBUTTON2:
- WM_APPCOMMAND
- WM_NCXBUTTONDBLCLK
- WM_NCXBUTTONDOWN
- WM_NCXBUTTONUP
- WM_XBUTTONDBLCLK
- WM_XBUTTONDOWN
- WM_XBUTTONUP
- MOUSEHOOKSTRUCTEX
Aşağıdaki API'ler bu düğmeleri destekleyecek şekilde değiştirildi:
- mouse_event
- ShellProc
- MSLLHOOKSTRUCT
- MOUSEINPUT
- WM_PARENTNOTIFY
Bileşen uygulamasındaki bir alt pencerenin XBUTTON1 ve XBUTTON2 için komutları doğrudan uygulayabilmesi olası değildir. Bu nedenle DefWindowProc XBUTTON1 veya XBUTTON2 tıklandığında pencereye WM_APPCOMMAND iletisi gönderir. DefWindowProcWM_APPCOMMAND iletisini de üst penceresine gönderir. Bu, bağlam menülerinin sağ tıklamayla çağrılma yöntemine benzer;DefWindowProc menüye bir WM_CONTEXTMENU iletisi gönderir ve ayrıca bunu üst öğesine gönderir. Ayrıca, DefWindowProc üst düzey bir pencere için WM_APPCOMMAND iletisi alırsa, kod HSHELL_APPCOMMAND içeren bir kabuk kancası çağırır.
Tarayıcı işlevleri, medya işlevleri, uygulama başlatma ve güç yönetimi için ek tuşlara sahip klavyeler için destek sağlanır. Daha fazla bilgi için bkz. gözatma ve diğer işlevler için klavye tuşları.
Fare İletileri
Kullanıcı fareyi hareket ettiğinde veya fare düğmesine bastığında veya serbest bıraktığında fare bir giriş olayı oluşturur. Sistem, fare girişi olaylarını iletilere dönüştürür ve uygun iş parçacığının ileti kuyruğuna gönderir. Fare iletileri bir iş parçacığının işleyenenden daha hızlı gönderildiğinde, sistem en son fare iletisi dışında tümünü atar.
İmleç pencerenin kenarlıkları içindeyken veya pencere fareyi yakaladığında bir fare olayı gerçekleştiğinde pencere fare iletisi alır. Fare iletileri iki gruba ayrılır: istemci alanı iletileri ve istemci olmayan alan iletileri. Genellikle, bir uygulama istemci alanı iletilerini işler ve istemci olmayan alan iletilerini yoksayar.
Bu bölümde aşağıdaki konular ele alınır:
- İstemci Alanı Fare İletileri
- İstemci Olmayan Alan Fare İletileri
- WM_NCHITTEST İleti
İstemci Alanı Fare İletileri
Pencerenin istemci alanında bir fare olayı gerçekleştiğinde pencere bir istemci alanı fare iletisi alır. Kullanıcı imleci istemci alanı içinde hareket ettirdiğinde sistem WM_MOUSEMOVE iletisini pencereye postalar. Kullanıcı, imleç istemci alanının içindeyken fare düğmesine bastığında veya bıraktığında aşağıdaki iletilerden birini postalar.
İleti | Anlam |
---|---|
WM_LBUTTONDBLCLK | Sol fare düğmesine çift tıklandı. |
WM_LBUTTONDOWN | Sol fare düğmesine basıldı. |
WM_LBUTTONUP | Sol fare düğmesi serbest bırakıldı. |
WM_MBUTTONDBLCLK | Ortadaki fare düğmesine çift tıklandı. |
WM_MBUTTONDOWN | Ortadaki fare düğmesine basıldı. |
WM_MBUTTONUP | Ortadaki fare düğmesi serbest bırakıldı. |
WM_RBUTTONDBLCLK | Sağ fare düğmesine çift tıklandı. |
WM_RBUTTONDOWN | Sağ fare düğmesine basıldı. |
WM_RBUTTONUP | Sağ fare düğmesi serbest bırakıldı. |
WM_XBUTTONDBLCLK | Bir X fare düğmesine çift tıklandı. |
WM_XBUTTONDOWN | X fare düğmesine basıldı. |
WM_XBUTTONUP | Bir X fare düğmesi serbest bırakıldı. |
Ayrıca, bir uygulama sistemin iki ileti daha göndermesini sağlamak için TrackMouseEvent işlevini çağırabilir. İmleç belirli bir süre boyunca istemci alanının üzerine geldiğinde WM_MOUSEHOVER iletisini postalar. İmleç istemci alanından ayrıldığında WM_MOUSELEAVE iletisini postalar.
İleti Parametreleri
İstemci alanı fare iletisinin lParam parametresi, imleç etkin noktasının konumunu gösterir. Düşük sıralı sözcük etkin noktanın x koordinatını, yüksek sıralı sözcük ise y koordinatını gösterir. Koordinatlar istemci koordinatlarında belirtilir. İstemci koordinat sisteminde, ekrandaki tüm noktalar istemci alanının sol üst köşesinin koordinatlarına (0,0) göre belirtilir.
wParam parametresi, fare olayı sırasında diğer fare düğmelerinin ve CTRL ve SHIFT tuşlarının durumunu gösteren bayraklar içerir. Fare iletisi işleme başka bir fare düğmesinin veya CTRL veya SHIFT tuşunun durumuna bağlı olduğunda bu bayrakları de kontrol edebilirsiniz. wParam parametresi aşağıdaki değerlerin bir bileşimi olabilir.
Değer | Açıklama |
---|---|
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 çalışmıyor. |
MK_XBUTTON2 | XBUTTON2 çalışmıyor. |
İletileri Double-Click
Kullanıcı bir fare düğmesine iki kez tıklayıp hızlı bir şekilde tıkladığında sistem çift tıklama iletisi oluşturur. Kullanıcı bir düğmeye tıkladığında, sistem imleç etkin noktasının etrafında ortalanmış bir dikdörtgen oluşturur. Ayrıca, tıklamanın gerçekleştiği zamanı da işaretler. Kullanıcı aynı düğmeye ikinci kez tıkladığında, sistem etkin noktanın hala dikdörtgen içinde olup olmadığını belirler ve ilk tıklamadan bu yana geçen süreyi hesaplar. Etkin nokta hala dikdörtgenin içindeyse ve geçen süre çift tıklama zaman aşımı değerini geçmezse, sistem çift tıklama iletisi oluşturur.
Uygulama, sırasıyla GetDoubleClickTimeve SetDoubleClickTimeişlevlerinikullanarak çift tıklama zaman aşımı değerlerini alabilir ve ayarlayabilir. Alternatif olarak uygulama, systemparametersInfoişleviyle SPI_SETDOUBLECLICKTIME bayrağını kullanarakçift tıklama-zaman aşımı değerini ayarlayabilir. SPI_SETDOUBLECLKWIDTH ve SPI_SETDOUBLECLKHEIGHT bayraklarını systemParametersInfo geçirerek sistemin çift tıklamaları algılamak için kullandığı dikdörtgenin boyutunu da ayarlayabilir. Ancak çift tıklama-zaman aşımı değerini ve dikdörtgeni ayarlamanın tüm uygulamaları etkileyeceğini unutmayın.
Uygulama tanımlı bir pencere varsayılan olarak çift tıklama iletileri almaz. Çift tıklama iletileri oluşturmada kullanılan sistem yükü nedeniyle, bu iletiler yalnızca CS_DBLCLKS sınıf stiline sahip sınıflara ait pencereler için oluşturulur. Uygulamanızın pencere sınıfını kaydederken bu stili ayarlaması gerekir. Daha fazla bilgi için bkz. Pencere Sınıfları.
Çift tıklama iletisi her zaman dört iletili serideki üçüncü iletidir. İlk iki ileti, ilk tıklamayla oluşturulan düğme aşağı ve düğme açma iletileridir. İkinci tıklama, çift tıklama iletisini ve ardından başka bir düğme iletiyi oluşturur. Örneğin, sol fare düğmesine çift tıklanması aşağıdaki ileti dizisini oluşturur:
Bir pencere her zaman çift tıklama iletisi almadan önce bir düğme aşağı iletisi aldığından, uygulama genellikle düğme aşağı ileti sırasında başladığı görevi genişletmek için çift tıklama iletisi kullanır. Örneğin, kullanıcı Microsoft Paint'in renk paletindeki bir renge tıkladığında, Paint seçili rengi paletin yanında görüntüler. Kullanıcı bir renge çift tıkladığında Paint rengi görüntüler ve Renkleri Düzenle iletişim kutusunu açar.
İstemci Olmayan Alan Fare İletileri
İstemci alanı dışında bir pencerenin herhangi bir bölümünde bir fare olayı gerçekleştiğinde pencere, istemci olmayan bir alan fare iletisi alır. Pencerenin istemci olmayan alanı kenarlık, menü çubuğu, başlık çubuğu, kaydırma çubuğu, pencere menüsü, simge durumuna küçült düğmesi ve ekranı kapla düğmesinden oluşur.
Sistem öncelikli olarak kendi kullanımı için istemci olmayan alan iletileri oluşturur. Örneğin sistem, imleç etkin noktası bir pencerenin kenarlığa geçtiğinde imleci iki başlı oka dönüştürmek için istemci olmayan alan iletilerini kullanır. Bir pencere, yerleşik fare arabiriminden yararlanmak için DefWindowProc işlevine istemci olmayan fare iletileri geçirmelidir.
Her istemci alanı fare iletisi için karşılık gelen bir istemci olmayan alan fare iletisi vardır. Bu iletilerin adları benzerdir, ancak istemci olmayan alan iletilerinin adlandırılmış sabitleri NC harflerini içerir. Örneğin, imlecin istemci olmayan alanda taşınması bir WM_NCMOUSEMOVE iletisi oluşturur ve imleç istemci olmayan alandayken sol fare düğmesine basıldığında bir WM_NCLBUTTONDOWN iletisi oluşturulur.
İstemci olmayan alan fare iletisinin lParam parametresi, imleç etkin noktasının x ve y koordinatlarını içeren bir yapıdır. İstemci alanı fare iletilerinin koordinatlarından farklı olarak, koordinatlar istemci koordinatları yerine ekran koordinatlarında belirtilir. Ekran koordinat sisteminde, ekrandaki tüm noktalar ekranın sol üst köşesinin koordinatlarına (0,0) göredir.
wParam parametresi, istemci olmayan alanda fare olayının oluştuğu yeri gösteren bir isabet sınaması değeri içerir. Aşağıdaki bölümde isabet testi değerlerinin amacı açıklanmaktadır.
WM_NCHITTEST İletisi
Bir fare olayı gerçekleştiğinde sistem, imlecin etkin noktasını içeren pencereye veya fareyi yakalayan pencereye WM_NCHITTEST iletisi gönderir. Sistem, istemci alanı mı yoksa istemci olmayan alan fare iletisi mi gönderileceğini belirlemek için bu iletiyi kullanır. Fare hareketi ve fare düğmesi iletileri alması gereken bir uygulama, WM_NCHITTEST iletisini DefWindowProc işlevine geçirmelidir.
WM_NCHITTEST iletisinin lParam parametresi, imleç etkin noktasının ekran koordinatlarını içerir. DefWindowProc işlevi koordinatları inceler ve etkin noktanın konumunu gösteren bir isabet testi değeri döndürür. İsabet testi değeri aşağıdaki değerlerden biri olabilir.
Değer | Etkin noktanın konumu |
---|---|
HTBORDER | Boyutlandırma kenarlı olmayan bir pencerenin kenarında. |
HTBOTTOM | Pencerenin alt yatay kenarında. |
HTBOTTOMLEFT | Pencere kenarlarının sol alt köşesinde. |
HTBOTTOMRIGHT | Pencere kenarlarının sağ alt köşesinde. |
HTCAPTION | Başlık çubuğunda. |
HTCLIENT | İstemci alanında. |
HTCLOSE | Kapat düğmesinde. |
HTERROR | Ekran arka planında veya pencereler arasında bir bölme çizgisinde (HTNOWHERE ile aynıdır, ancak DefWindowProc işlevi hata belirtmek için bir sistem bip sesi üretir). |
HTGROWBOX | Boyut kutusunda (HTSIZEile aynıdır). |
HTHELP | Yardım düğmesinde. |
HTHSCROLL | Yatay kaydırma çubuğunda. |
HTLEFT | Pencerenin sol kenarında. |
HTMENU | Menüde. |
HTMAXBUTTON | Ekranı Kapla düğmesinde. |
HTMINBUTTON | Simge Durumuna Küçült düğmesinde. |
HTNOWHERE | Ekran arka planında veya pencereler arasında bir bölme satırında. |
HTREDUCE | Simge Durumuna Küçült düğmesinde. |
HTRIGHT | Pencerenin sağ kenarında. |
HTSIZE | Boyut kutusunda (HTGROWBOXile aynıdır). |
HTSYSMENU | Sistem menüsünde veya alt penceredeki Kapat düğmesinde. |
HTTOP | Pencerenin yatay üst kenarında. |
HTTOPLEFT | Pencere kenarlarının sol üst köşesinde. |
HTTOPRIGHT | Pencere kenarlarının sağ üst köşesinde. |
HTTRANSPARENT | Şu anda aynı iş parçacığındaki başka bir pencere tarafından kapsanan bir pencerede. |
HTVSCROLL | Dikey kaydırma çubuğunda. |
HTZOOM | Ekranı Kapla düğmesinde. |
İmleç bir pencerenin istemci alanındaysa, DefWindowProcpencere yordamına HTCLIENT isabet testi değerini döndürür. Pencere yordamı bu kodu sisteme döndürdüğünde, sistem imleç etkin noktasının ekran koordinatlarını istemci koordinatlarına dönüştürür ve ardından uygun istemci alanı fare iletisini postalar.
DefWindowProc işlevi, imleç etkin noktası pencerenin istemci olmayan alanında olduğunda diğer isabet testi değerlerinden birini döndürür. Pencere yordamı bu isabet sınaması değerlerinden birini döndürdüğünde, sistem istemci olmayan bir alan faresi iletisi göndererek isabet testi değerini iletinin wParam parametresine ve imleç koordinatlarını lParam parametresine yerleştirir.
Fare Sonarı
Fare Sonar erişilebilirlik özelliği, kullanıcı CTRL tuşuna basıp bıraktığında işaretçinin etrafında birkaç eşmerkezli daire gösterir. Bu özellik, kullanıcının fare işaretçisini dağınık veya çözünürlüğü yüksek, düşük kaliteli bir monitörde veya görme bozukluğu olan kullanıcılar için ayarlanmış bir ekranda bulmasına yardımcı olur. Daha fazla bilgi için SystemParametersInfo'da aşağıdaki bayraklara bakın:
SPI_GETMOUSESONAR
SPI_SETMOUSESONAR
FareNin Kaybolması
FareNin Kaybolması erişilebilirlik özelliği, kullanıcı yazarken işaretçiyi gizler. Kullanıcı fareyi hareket ettiğinde fare işaretçisi yeniden görünür. Bu özellik işaretçinin, örneğin bir e-postada veya başka bir belgede yazılan metni gizlemesini engeller. Daha fazla bilgi için SystemParametersInfo'da aşağıdaki bayraklara bakın:
SPI_GETMOUSEVANISH
SPI_SETMOUSEVANISH
Fare Tekerleği
Fare tekerleği, tekerleğin ve fare düğmesinin özelliklerini birleştirir. Tekerleğin ayrı, eşit aralıklı çentikleri vardır. Tekerleği döndürdüğünüzde, her çentikle karşılaşıldığında uygulamanıza bir tekerlek iletisi gönderilir. Tekerlek düğmesi normal bir Windows orta (üçüncü) düğmesi olarak da çalışabilir. Fare tekerleğine basıp serbest bırakmak standart WM_MBUTTONUP ve WM_MBUTTONDOWN iletileri gönderir. Üçüncü düğmeye çift tıklanması standart WM_MBUTTONDBLCLK iletisini gönderir.
Fare tekerleği WM_MOUSEWHEEL iletisiyle desteklenir.
Fareyi döndürmek WM_MOUSEWHEEL iletisini odak penceresine gönderir. DefWindowProc işlevi iletiyi pencerenin üst öğesine yayılır. DefWindowProc bunu işleyen bir pencere bulunana kadar üst zincire yaydığından, iletinin iç iletmesi olmamalıdır.
Kaydırma Çizgisi Sayısını Belirleme
Uygulamalar, belgenin her kaydırma işlemi (tekerlek çentiği) için kaydırdığı satır sayısını almak için SystemParametersInfo işlevini kullanmalıdır. Bir uygulama, satır sayısını almak için aşağıdaki çağrıyı yapar:
SystemParametersInfo(SPI_GETWHEELSCROLLLINES, 0, pulScrollLines, 0)
"pulScrollLines" değişkeni, fare tekerleği değiştirici tuşları olmadan döndürülürken kaydırmak için önerilen satır sayısını alan işaretsiz bir tamsayı değerini gösterir:
- Bu sayı 0 ise kaydırma yapılmamalıdır.
- Bu sayı WHEEL_PAGESCROLLise, kaydırma çubuğunun sayfa aşağı veya sayfa yukarı bölgelerine bir kez tıklandığı gibi bir tekerlek rulosu yorumlanmalıdır.
- Kaydırılacak satır sayısı görüntülenebilir satır sayısından büyükse, kaydırma işlemi de sayfa aşağı veya sayfa yukarı işlemi olarak yorumlanmalıdır.
Kaydırma çizgisi sayısı için varsayılan değer 3 olacaktır. Kullanıcı kaydırma çizgilerinin sayısını değiştirirse, Denetim Masası'ndaki Fare Özellikleri sayfasını kullanarak, işletim sistemi SPI_SETWHEELSCROLLLINES belirtilen tüm üst düzey pencerelere WM_SETTINGCHANGE bir ileti yayınlar. Bir uygulama WM_SETTINGCHANGE iletisini aldığında, şu çağrıyı yaparak yeni kaydırma satırı sayısını alabilir:
SystemParametersInfo(SPI_GETWHEELSCROLLLINES, 0, pulScrollLines, 0)
Kaydıran denetimler
Aşağıdaki tabloda kaydırma işlevine sahip denetimler (kullanıcı tarafından ayarlanan kaydırma çizgileri dahil) listelenmiştir.
Kontrol | Kaydırma |
---|---|
Denetimi Düzenle | Dikey ve yatay. |
Liste kutusu Denetimi | Dikey ve yatay. |
Bileşim kutusu | Aşağı bırakılmadığında, her kaydırma sonraki veya önceki öğeyi alır. Aşağı bırakıldığında, her kaydırma iletiyi uygun şekilde kaydırılan liste kutusuna iletir. |
CMD (Komut satırı) | Dikey. |
Ağaç Görünümü | Dikey ve yatay. |
Liste Görünümü | Dikey ve yatay. |
Yukarı/Aşağı Kaydırmalar | Bir kerede bir öğe. |
İzleme Çubuğu Kaydırmaları | Bir kerede bir öğe. |
Microsoft Rich Edit 1.0 | Dikey. Exchange istemcisinin, tekerlek desteği olmayan liste görünümünün ve ağaç görünümü denetimlerinin kendi sürümleri olduğunu unutmayın. |
Microsoft Rich Edit 2.0 | Dikey. |
Tekerlekle Fare Algılama
Tekerleğe sahip bir farenin bağlı olup olmadığını belirlemek için, SM_MOUSEWHEELPRESENTile GetSystemMetricsçağırabilirsiniz. true dönüş değeri farenin bağlı olduğunu gösterir.
Aşağıdaki örnek, çok satırlı düzenleme denetimi için pencere yordamından alınmalıdır:
BOOL ScrollLines(
PWNDDATA pwndData, //scrolls the window indicated
int cLinesToScroll); //number of times
short gcWheelDelta; //wheel delta from roll
PWNDDATA pWndData; //pointer to structure containing info about the window
UINT gucWheelScrollLines=0;//number of lines to scroll on a wheel rotation
gucWheelScrollLines = SystemParametersInfo(SPI_GETWHEELSCROLLLINES,
0,
pulScrollLines,
0);
case WM_MOUSEWHEEL:
/*
* Do not handle zoom and datazoom.
*/
if (wParam & (MK_SHIFT | MK_CONTROL)) {
goto PassToDefaultWindowProc;
}
gcWheelDelta -= (short) HIWORD(wParam);
if (abs(gcWheelDelta) >= WHEEL_DELTA && gucWheelScrollLines > 0)
{
int cLineScroll;
/*
* Limit a roll of one (1) WHEEL_DELTA to
* scroll one (1) page.
*/
cLineScroll = (int) min(
(UINT) pWndData->ichLinesOnScreen - 1,
gucWheelScrollLines);
if (cLineScroll == 0) {
cLineScroll++;
}
cLineScroll *= (gcWheelDelta / WHEEL_DELTA);
assert(cLineScroll != 0);
gcWheelDelta = gcWheelDelta % WHEEL_DELTA;
return ScrollLines(pWndData, cLineScroll);
}
break;
Pencere Etkinleştirme
Kullanıcı etkin olmayan bir üst düzey pencereye veya etkin olmayan bir üst düzey pencerenin alt penceresine tıkladığında, sistem WM_MOUSEACTIVATE iletisini (diğerlerinin yanı sıra) üst düzey veya alt pencereye gönderir. Sistem, WM_NCHITTEST iletisini pencereye gönderdikten sonra ancak düğme aşağı iletisini göndermeden önce bu iletiyi gönderir. DefWindowProc işlevine WM_MOUSEACTIVATE geçirildiğinde, sistem en üst düzey pencereyi etkinleştirir ve ardından düğme aşağı iletisini üst düzeye veya alt pencereye postalar.
WM_MOUSEACTIVATEişlenerek, bir pencere fare tıklaması sonucunda en üst düzey pencerenin etkin pencere olup olmadığını ve tıklanan pencerenin sonraki düğme aşağı iletisini alıp almayacağını denetleyebilir. bunu, WM_MOUSEACTIVATEişledikten sonra aşağıdaki değerlerden birini döndürerek yapar.
Değer | Anlam |
---|---|
MA_ACTIVATE | Pencereyi etkinleştirir ve fare iletisini atmıyor. |
MA_NOACTIVATE | Pencereyi etkinleştirmez ve fare iletisini atmıyor. |
MA_ACTIVATEANDEAT | Pencereyi etkinleştirir ve fare iletisini atar. |
MA_NOACTIVATEANDEAT | Pencereyi etkinleştirmez, ancak fare iletisini atar. |
Ayrıca bkz.
fare hareketi High-Definition yararlanma