Aracılığıyla paylaş


Araç İpucu Denetimleri Hakkında

Kullanıcı fare işaretçisini bir aracın veya başka bir kullanıcı arabirimi öğesinin üzerinde duraklattığında araç ipuçları otomatik olarak görünür veya açılır. Araç ipucu, işaretçinin yanında görünür ve kullanıcı fare düğmesine tıkladığında, işaretçiyi araçtan uzaklaştırdığında veya yalnızca birkaç saniye beklemeyle kaybolur.

Aşağıdaki çizimde yer alan araç ipucu denetimi, Windows masaüstündeki bir dosya hakkındaki bilgileri görüntüler. Fareyi çizimin üzerinde hareket ettirdiğinizde, açıklayıcı metni içeren bir canlı araç ipucunu da görmelisiniz.

Masaüstündeki bir dosyanın üzerinde görünen araç ipucundaki metni gösteren ekran görüntüsü

Bu bölümde araç ipucu denetimlerinin nasıl çalıştığı ve bunları nasıl oluşturduğunuz açıklanmaktadır.

Araç İpucu Davranışı ve Görünümü

Araç ipucu denetimleri tek bir metin satırı veya birden çok satır görüntüleyebilir. Köşeleri kare veya yuvarlak olabilir. Çizgi film konuşma balonu gibi araçlara işaret eden bir sapları olabilir veya olmayabilir. Araç ipucu metni sabit olabilir veya izleme adı verilen fare işaretçisiyle hareket edebilir. Sabit metin bir aracın yanında görüntülenebilir veya yerinde olarak adlandırılan bir araç üzerinde görüntülenebilir. Standart araç ipuçları sabittir, tek satırlık metin görüntüler, köşeleri karedir ve araca işaret eden bir bağlantı içermez.

Ortak denetimlerin sürüm 4.70 tarafından desteklenen izleme araç ipuçları, ekrandaki konumu dinamik olarak değiştirir. Bu araç ipucu denetimleri, konumu hızla güncelleyerek sorunsuz bir şekilde hareket eder gibi görünür. Bunlar, araç ipucu metninin fare işaretçisinin hareketi sırasında konumunu takip etmesini istediğinizde kullanışlıdır. İzleme araç ipuçları hakkında daha fazla bilgi ve bunların nasıl oluşturulacağını gösteren kodlu bir örnek için bkz. İzleme Araç İpuçları.

Ortak denetimlerin 4.70 sürümü tarafından da desteklenen çok satırlı araç ipuçları, metni birden fazla satırda görüntüleyebilir. Bunlar uzun iletileri görüntülemek için kullanışlıdır. Daha fazla bilgi ve çok satırlı araç ipuçlarının nasıl oluşturulacağını gösteren bir örnek için bkz. Çok Satırlı Araç İpuçları.

Balon araç ipuçları, yuvarlatılmış köşeleri ve aracığa işaret eden bir gövde içeren bir kutuda görüntülenir. Tek satırlı veya çok satırlı olabilir. Aşağıdaki çizimde, kök ve dikdörtgenin varsayılan konumlarında olduğu bir balon ipucu gösterilmektedir. Balon ipuçları hakkında daha fazla bilgi ve bunların nasıl oluşturulacağını gösteren bir örnek için bkz. İpucu Kontrollerini Kullanma.

bir diyalog kutusundaki bir düğmenin üzerinde konumlandırılan bir satır metin içeren araç ipucunu gösteren ekran görüntüsü

Araç ipucu, aşağıdaki çizimde gösterildiği gibi başlık metnine ve simgeye de sahip olabilir. Araç ipucunda metin olması gerektiğini unutmayın; yalnızca başlık metni varsa, araç ipucu görüntülenmez. Ayrıca, başlık olmadığı sürece simge görünmez.

İkon, başlık ve metin içeren bir araç ipucunun, bir iletişim kutusundaki düğmenin altına yerleştirilmiş halde gösterildiği ekran görüntüsü

Bazen metin dizeleri küçük bir pencerede tamamen görüntülenemeyecek kadar uzun olduğundan kırpılır. Yerleşik araç ipuçları, aşağıdaki resimdeki dosya adı gibi kırpılmış nesnelerin metin dizelerini göstermek için kullanılır. Yerinde tooltip oluşturmayı gösteren bir örnek için bkz. In-Place Tooltips.

Ağaç denetiminde dosya simgesinin yanına yerleştirilmiş dosya adını içeren araç ipucu gösteren ekran görüntüsü

İmlecin bir aracın üzerine gelmesi gerekir; araç ipucu görüntülenmeden önce belli bir süre beklemelidir. Bu zaman aşımının varsayılan süresi kullanıcının çift tıklama süresiyle denetlener ve genellikle yaklaşık yarım saniyedir. Varsayılan olmayan bir zaman aşımı değeri belirtmek için araç ipucu denetimine bir TTM_SETDELAYTIME iletisi gönderin.

Araç İpucu Kontrolleri Oluşturma

Araç ipucu denetimi oluşturmak için CreateWindowExçağırın ve TOOLTIPS_CLASS pencere sınıfını belirtin. Ortak denetim DLL'i yüklendiğinde bu sınıf kaydedilir. Bu DLL'nin yüklendiğinden emin olmak için InitCommonControlsEx işlevini uygulamanıza ekleyin. Araç ipucu kontrolünü en üstte açıkça tanımlamanız gerekir. Aksi takdirde, ana pencere tarafından kapsanabilir. Aşağıdaki kod parçası araç ipucu denetiminin nasıl oluşturulacağını gösterir.

HWND hwndTip = CreateWindowEx(NULL, TOOLTIPS_CLASS, NULL,
                            WS_POPUP | TTS_NOPREFIX | TTS_ALWAYSTIP,
                            CW_USEDEFAULT, CW_USEDEFAULT,
                            CW_USEDEFAULT, CW_USEDEFAULT,
                            hwndParent, NULL, hinstMyDll,
                            NULL);

SetWindowPos(hwndTip, HWND_TOPMOST,0, 0, 0, 0,
             SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE);

Araç ipucu denetiminin pencere yordamı, denetimin boyutunu, konumunu ve görünürlüğünü otomatik olarak ayarlar. Araç ipucu penceresinin yüksekliği, araç ipucu denetimi için cihaz bağlamında seçili durumdaki yazı tipinin yüksekliğini temel alır. Genişlik, araç ipucu penceresindeki dizenin uzunluğuna göre değişir.

Araç İpucu Kontrollerini Etkinleştirme

Araç ipucu denetimi etkin veya etkin değil olabilir. Etkin olduğunda, araç ipucu metni fare işaretçisi bir aracın üzerindeyken görüntülenir. Aktif olmadığında, imleç bir araçta olsa bile araç ipucu metni görünmez. TTM_ACTIVATE iletisi bir araç ipucu denetimini etkinleştirir ve devre dışı bırakır.

Destek Araçları

Araç ipucu denetimi herhangi bir sayıda aracı destekleyebilir. Belirli bir aracı desteklemek için, TTM_ADDTOOL iletisini göndererek aracı araç ipucu denetimi ile kaydetmeniz gerekir. İleti, araç ipucu denetiminin araç için metin görüntülemek için ihtiyaç duyduğu bilgileri sağlayan TOOLINFO yapısının adresini içerir. TOOLINFO yapısının uID üyesi uygulama tarafından tanımlanır. Her araç eklediğinizde uygulamanız benzersiz bir tanımlayıcı sağlar. TOOLINFO yapısının cbSize üyesi gereklidir ve yapının boyutunu belirtmelidir.

Araç ipucu denetimi, pencere olarak (örneğin alt pencereler veya denetim pencereleri) ve pencerenin istemci alanındaki dikdörtgen alanlar olarak uygulanan araçları destekler. Dikdörtgen alan olarak uygulanan bir araç eklediğinizde, TOOLINFO yapısının üyesi hwnd, alanı içeren pencerenin tutamacını belirtmeli ve rect üyesi de alanın sınırlayıcı dikdörtgeninin istemci koordinatlarını belirtmelidir. Ayrıca uID üyesinin araç için uygulama tanımlı tanımlayıcıyı belirtmesi gerekir.

Pencere olarak uygulanan bir araç eklediğinizde, TOOLINFO yapısının uID üyesi aracın pencere tutamacını içermelidir. Ayrıca, uFlags üyesinde, araç ipucu denetiminin uID üyesini pencere tutamacı olarak yorumlamasını sağlayan TTF_IDISHWND değeri belirtilmelidir.

Metin Görüntüleme

Araç ipucu denetimine bir araç eklediğinizde, TOOLINFO yapısının lpszText üyesi, araç için görüntülenecek dizenin adresini belirtmelidir. Araç ekledikten sonra, TTM_UPDATETIPTEXT iletisini kullanarak metni değiştirebilirsiniz.

lpszText yüksek dereceli sözcüğü sıfırsa, düşük dereceli sözcük bir dize kaynağının tanımlayıcısı olmalıdır. Araç ipucu kontrolü metne ihtiyaç duyduğunda, sistem TOOLINFO yapısının hinst üyesi tarafından tanımlanan uygulama örneğinden belirtilen dize kaynağını yükler.

lpszText üyesinde LPSTR_TEXTCALLBACK değerini belirtirseniz araç ipucu denetimi, araç ipucu denetiminin araç için metin görüntülemesi gerektiğinde TOOLINFOyapısının hwnd üyesinde belirtilen pencereyi bildirir. Araç ipucu denetimi TTN_GETDISPINFO bildirim kodunu pencereye gönderir. İleti, pencere tutamacını ve aracın uygulama tanımlı tanımlayıcısını içeren NMTTDISPINFO yapısının adresini içerir. Pencere, metnin gerekli olduğu aracı belirlemek için yapıyı inceler ve uygun yapı üyelerini dizeyi görüntülemek için araç ipucu denetiminin ihtiyaç duyduğu bilgilerle doldurur.

Not

Standart araç ipucu metni için uzunluk üst sınırı 80 karakterdir. Daha fazla bilgi için bkz. NMTTDISPINFO yapısı. Çok satırlı araç ipucu metinleri daha uzun olabilir.

 

Birçok uygulama, menü komutlarına karşılık gelen araçlar içeren araç çubukları oluşturur. Bu tür araçlar için, araç ipucu denetiminin ilgili menü öğesiyle aynı metni görüntülemesi uygundur. Sistem, ampersand (&) hızlandırıcı karakterlerini araç ipucu denetimine geçirilen tüm dizelerden otomatik olarak çıkarır ve denetimin TTS_NOPREFIX stiline sahip olmadığı sürece ilk sekme karakterine (\t) ulaşıldığında dizeyi sonlandırır.

Bir aracın metnini almak için TTM_GETTEXT iletisini kullanın.

Mesajlaşma ve Bildirim

Araç ipucu metni normalde fare işaretçisi bir alanın üzerine geldiğinde(genellikle düğme denetimi gibi bir araç tarafından tanımlanan dikdörtgen) görüntülenir. Ancak Microsoft Windows, araç ipucu denetiminin kendisini değil yalnızca işaretçiyi içeren pencereye fareyle ilgili iletiler gönderir. Araç ipucu metnini uygun zamanda ve yerde görüntüleyebilmesi için fareyle ilgili bilgilerin araç ipucu kontrolüne iletilmesi gerekir.

İletilerin aşağıdaki gibi otomatik olarak geçirilmesini sağlayabilirsiniz:

  • Araç bir denetimdir veya TOOLINFO yapısında bir dikdörtgen olarak tanımlanır.
  • Araçla ilişkilendirilmiş pencere, araç ipucu denetimiyle aynı iş parçacığındadır.

Bu iki koşul karşılanırsa, aracı TTM_ADDTOOLile araç ipucu denetimine eklediğinizde aracın TOOLINFO yapısının uFlags üyesinde TTF_SUBCLASS bayrağını ayarlayın. Gerekli fare iletileri otomatik olarak araç ipucu denetimine iletilir.

fare iletilerinin denetime geçirilmesi için TTF_SUBCLASS ayarlanması çoğu amaç için yeterlidir. Ancak, araç ipucu denetimi ile aracın penceresi arasında doğrudan bağlantının olmadığı durumlarda çalışmaz. Örneğin, bir araç uygulama tanımlı bir pencerede dikdörtgen bir alan olarak uygulanırsa, pencere yordamı fare iletilerini alır. TTF_SUBCLASS ayarı, denetime geçirildiklerinden emin olmak için yeterlidir. Ancak, bir araç sistem tanımlı bir pencere olarak uygulanırsa, fare iletileri bu pencereye gönderilir ve uygulama tarafından doğrudan kullanılamaz. Bu durumda, pencereyi alt sınıflamanız veya fare iletilerine erişmek için bir ileti kancası kullanmanız gerekir. Daha sonra fare iletilerini TTM_RELAYEVENTile araç ipucu denetimine açıkça geçirmeniz gerekir. TTM_RELAYEVENTkullanma örneği için bkz. İzleme Araç İpuçları.

Bir yardımcı ipucu denetimi WM_MOUSEMOVE mesajı aldığında, fare işaretçisinin bir aracın sınırlayıcı dikdörtgeninde olup olmadığını belirler. Bu durumda, araç ipucu denetimi bir zamanlayıcı ayarlar. Zaman aşımı süresinin sonunda, ipucu denetimi işaretçinin hareket edip etmediğini kontrol etmek için işaretçinin konumunu denetler. Aksi takdirde, araç ipucu denetimi aracın metnini alır ve araç ipucuyu görüntüler. Araç ipucu denetimi, iletilen bir düğme yukarı veya düğme aşağı mesajı alana kadar veya WM_MOUSEMOVE mesajı işaretçinin araç sınırlayıcı dikdörtgeninin dışına taşındığını belirtiyorsa pencereyi göstermeye devam eder.

Bir araç ipucu denetiminin aslında kendisiyle ilişkilendirilmiş üç zaman aşımı süresi vardır. Başlangıç süresi, araç ucu penceresi açılmadan önce fare işaretçisinin bir aracın sınır dikdörtgeni içinde sabit kalma süresidir. Yeniden gösterim süresi, işaretçi bir araçtan diğerine geçtiğinde sonraki araç ipucu pencerelerinin görüntülenmesinden önceki gecikmenin uzunluğudur. Araç ipucu penceresinin gizlenmeden önce kalmaya devam ettiği süre açılır pencere süresidir. Yani, araç ipucu penceresi görüntülendikten sonra işaretçi sınırlandırma dikdörtgeni içinde sabit kalırsa, açılır pencere görünürlük süresinin sonunda otomatik olarak gizlenir. TTM_SETDELAYTIME iletisini kullanarak tüm zaman aşımı sürelerini ayarlayabilirsiniz.

Bir uygulama dikdörtgen alan olarak uygulanan bir araç içeriyorsa ve denetimin boyutu veya konumu değişirse, uygulama değişikliği araç ipucu denetimine bildirmek için TTM_NEWTOOLRECT iletisini kullanabilir. Bir uygulamanın, pencere olarak uygulanan bir araç için boyut ve konum değişikliklerini raporlaması gerekmez çünkü araç ipucu denetimi, fare işaretçisinin aracın üzerinde olup olmadığını belirlemek için aracın pencere tutamacını kullanır, aracın sınırlayıcı dikdörtgenini değil.

Araç ipucu görüntülenmek üzereyken, araç ipucu denetimi sahip penceresine bir TTN_SHOW bildirim kodu gönderir. Araç ipucu gizlenmek üzereyken sahip penceresi bir TTN_POP bildirim kodu alır. Her bildirim kodu bir WM_NOTIFY iletisi bağlamında gönderilir.

İsabet Testi

TTM_HITTEST iletisi, araç ipucu denetiminin belirli bir noktayı işgal eden araç hakkında koruduğu bilgileri almanıza olanak tanır. İleti, bir pencere tutamacı, bir noktanın koordinatları ve TOOLINFO yapısının adresini içeren bir TTHITTESTINFO yapısı içerir. Araç ipucu denetimi, bir aracın noktayı kaplayıp kaplamadığını belirler ve kapladığında TOOLINFO'u araç hakkındaki bilgilerle doldurur.

Varsayılan İleti İşleme

Aşağıdaki tabloda, araç ipucu denetimi için pencere yordamı tarafından işlenen iletiler açıklanmaktadır.

İleti Açıklama
WM_CREATE Araç ipucu denetiminin WS_EX_TOOLWINDOW ve WS_POPUP pencere stillerine sahip olmasını sağlar. Ayrıca bellek ayırır ve iç değişkenleri başlatır.
WM_DESTROY Araç ipucu denetimi için ayrılan kaynakları serbest bırakır.
WM_GETFONT Araç ipucu denetiminin metin çizmek için kullanacağı yazı tipinin tutamacını döndürür.
WM_MOUSEMOVE Araç ipucu penceresini gizler.
WM_PAINT Araç ipucu penceresini çizer.
WM_SETFONT Araç ipucu denetiminin metin çizmek için kullanacağı yazı tipinin tutamacını ayarlar.
WM_TIMER Araç konumu değiştiyse veya fare işaretçisi aracın dışına taşındıysa araç ipucu penceresini gizler. Aksi takdirde araç ipucu penceresini gösterir.
WM_WININICHANGE Sistem ölçümlerini temel alan iç değişkenleri sıfırlar.