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.
Menü, bir uygulama için seçenekleri veya seçenek gruplarını (alt menü) belirten öğelerin listesidir. Bir menü öğesine tıklanması bir alt menü açar veya uygulamanın bir komut yürütmesine neden olur. Bu bölümde aşağıdaki konular hakkında bilgi sağlanır:
- Menü Çubukları ve Menüler
- Menülere Klavye Erişimi
- Menü Oluşturma
-
Menü Öğeleri
- Alt Menüleri Açan Komut Öğeleri ve Öğeler
- Menu-Item Tanımlayıcısı
- Menu-Item Konumu
- Menü Öğelerine Program Aracılığıyla Erişme
- Varsayılan Menü Öğeleri
- Seçili ve Menü Öğelerini Temizle
- Etkin, Gri ve Devre Dışı Menü Öğeleri
- Vurgulanan Menü Öğeleri
- Owner-Drawn Menü Öğeleri
- Menü Öğesi Ayırıcıları ve Satır Sonları
- Menülerle Kullanılan İletiler
- Menü Yok Etme
Menü Çubukları ve Menüler
Menü hiyerarşide düzenlenir. Hiyerarşinin en üst düzeyinde menü çubuğu bulunur; bir menü listesi içerir ve bu liste de alt menüler içerebilir. Menü çubuğu bazen en üst düzey menü olarak adlandırılır ve menüler ve alt menüler açılır menüler olarak da bilinir.
Menü öğesi bir komut yürütebilir veya bir alt menü açabilir. Komut yürüten bir öğeye komut öğesi veya komut adı verilir.
Menü çubuğundaki bir öğe neredeyse her zaman bir menü açar. Menü çubukları nadiren komut öğeleri içerir. Menü çubuğundan açılan bir menü, menü çubuğundan aşağı düşer ve bazen açılan menü olarak adlandırılır. Açılır menü görüntülendiğinde, menü çubuğuna bağlıdır. Menü çubuğunda açılan menü öğesi, menü adı olarak da adlandırılır.
Menü çubuğundaki menü adları, bir uygulamanın sağladığı ana komut kategorilerini temsil eder. Menü çubuğundan bir menü adı seçildiğinde genellikle menü öğeleri bir kategorideki komutlara karşılık gelen bir menü açılır. Örneğin, bir menü çubuğu, kullanıcı tarafından tıklandığında Yeni, Aç ve Kaydet gibi menü öğeleri içeren bir menüyü etkinleştiren bir Dosya menüsü adı içerebilir. Menü çubuğu hakkında bilgi almak için GetMenuBarInfo öğesini arayın.
Yalnızca örtüşen veya açılan bir pencere bir menü çubuğu içerebilir; bir alt pencere bunu içermeyebilir. Pencerenin başlık çubuğu varsa, sistem menü çubuğunu hemen altına konumlandıracaktır. Menü çubuğu her zaman görünür. Ancak, kullanıcı onu etkinleştiren bir menü öğesi seçene kadar alt menü görünmez. Çakışan ve açılan pencereler hakkında daha fazla bilgi için bkz. Pencere Türleri.
Her menünün bir sahip penceresi olmalıdır. Kullanıcı menüyü seçtiğinde veya menüden bir öğe seçtiğinde sistem iletileri menünün sahip penceresine gönderir.
Bu bölümde aşağıdaki konular ele alınmaktadır.
Kısayol Menüleri
Sistem ayrıca kısayol menüleri de sağlar. Menü çubuğuna bir kısayol menüsü eklenmez; ekranda herhangi bir yerde görünebilir. Uygulama genellikle bir kısayol menüsünü pencerenin bir bölümüyle (örneğin, istemci alanı) veya simge gibi belirli bir nesneyle ilişkilendirir. Bu nedenle, bu menüler bağlam menüleri olarak da adlandırılır.
Kısayol menüsü, kullanıcı etkinleştirene kadar, genellikle bir seçime, araç çubuğuna veya görev çubuğu düğmesine sağ tıklayarak gizli kalır. Menü genellikle metin imlecinin veya fare imlecinin konumunda görüntülenir.
Pencere Menüsü
Pencere menüsü (Sistem menüsü veya Denetim menüsü olarak da bilinir), neredeyse yalnızca işletim sistemi tarafından tanımlanan ve yönetilen bir açılır menüdür. Kullanıcı, başlık çubuğundaki uygulama simgesine tıklayarak veya başlık çubuğunda herhangi bir yere sağ tıklayarak pencere menüsünü açabilir.
Pencere menüsü, kullanıcının pencerenin boyutunu veya konumunu değiştirmeyi ya da uygulamayı kapatmayı seçebileceği standart bir menü öğeleri kümesi sağlar. Pencere menüsündeki öğeler eklenebilir, silinebilir ve değiştirilebilir, ancak çoğu uygulama yalnızca standart menü öğeleri kümesini kullanır. Çakışan pencere, açılır pencere veya alt pencere, bir pencere menüsüne sahip olabilir. Çakışan veya açılan bir pencerenin pencere menüsü içermemesi nadir karşılaşılan bir durumdur.
Kullanıcı Pencere menüsünden bir komut seçtiğinde, sistem menünün sahip penceresine bir WM_SYSCOMMAND iletisi gönderir. Çoğu uygulamada, pencere yordamı pencere menüsünden iletileri işlemez. Bunun yerine, iletinin sistem tarafından varsayılan olarak işlenmesi için iletileri Yalnızca DefWindowProc işlevine geçirir. Uygulama pencere menüsüne bir komut eklerse, pencere yordamı komutu işlemelidir.
Bir uygulama, değiştirmek üzere varsayılan pencere menüsünün bir kopyasını oluşturmak için GetSystemMenu işlevini kullanabilir. Pencere menüsünün kendi kopyasını oluşturmak için GetSystemMenu işlevini kullanmayan herhangi bir pencere standart pencere menüsünü alır.
Yardım Tanımlayıcısı
Her menü çubuğu, menü, alt menü ve kısayol menüsüyle ilişkilendirilen bir yardım tanımlayıcısı vardır. Kullanıcı menü etkinken F1 tuşuna basarsa, bu değer WM_HELP iletisinin bir parçası olarak sahip penceresine gönderilir.
Menülere Klavye Erişimi
Sistem, menüler için standart bir klavye arabirimi sağlar. Menü öğeleriniz için anımsatıcı erişim tuşları ve kısayol (hızlandırıcı) tuşları sağlayarak bu arabirimi geliştirebilirsiniz.
Aşağıdaki konular standart klavye arabirimini, erişim tuşlarını ve kısayol tuşlarını açıklar:
Standart Klavye Arabirimi
Sistem, fare veya başka bir işaret cihazıyla veya fare olmadan çalışacak şekilde tasarlanmıştır. Sistem standart bir klavye arabirimi sağladığından, kullanıcı menü öğelerini seçmek için klavyeyi kullanabilir. Bu klavye arabiriminin özel koda ihtiyacı yoktur. Bir uygulama, kullanıcının klavye aracılığıyla veya fare kullanarak bir menü öğesi seçmesine bakılmaksızın bir komut iletisi alır. Standart klavye arabirimi aşağıdaki tuş vuruşlarını işler.
| Tuş vuruşu | Eylem |
|---|---|
| Alfabetik karakter | Erişim anahtarı olarak belirtilen karaktere sahip ilk menü öğesini seçer. Seçili öğe bir menü çağırırsa, menü görüntülenir ve ilk öğe vurgulanır. Aksi takdirde, menü öğesi seçilir. |
| ALT | Menü çubuğu moduna girip çıkar. |
| ALT+ARA ÇUBUĞU | Pencere menüsünü görüntüler. |
| GİRİN | Bir menüyü etkinleştirir ve öğeyle ilişkilendirilmiş bir menü varsa ilk menü öğesini seçer. Aksi takdirde, bu tuş vuruşu öğeyi, kullanıcı fare düğmesini öğe seçiliyken serbest bırakır gibi seçer. |
| ESC | Menü modundan çıkar. |
| Sol Ok | Önceki en üst düzey menü öğesine döner. Üst düzey menü öğeleri menü adlarını ve pencere menüsünü içerir. Seçili öğe bir menüdeyse, menüdeki önceki sütun seçilir veya önceki en üst düzey menü öğesi seçilir. |
| SAĞ OK | Ters yöndekiler dışında SOL OK tuşu gibi çalışır. Menülerde, bu tuş vuruşu bir sütun ileri doğru ilerler; seçili durumdaki öğe en sağdaki sütunda olduğunda, sonraki menü seçilir. |
| YUKARI veya AŞAĞI OKLAR | Menü adına basıldığında menüyü etkinleştirir. Bir menüde basıldığında, YUKARI OK tuş vuruşu önceki öğeyi seçer; AŞAĞI OK tuş vuruşu sonraki öğeyi seçer. |
Menü Erişim Tuşları
Menü öğelerine erişim tuşları (anımsatıcılar) eklenerek menüler için standart klavye arabirimi geliştirilebilir. Erişim anahtarı, menü öğesinin metninde altı çizili bir harftir. Menü etkin olduğunda, kullanıcı öğenin altı çizili harfine karşılık gelen tuşa basarak bir menü öğesi seçebilir. Kullanıcı, menü çubuğundaki ilk öğeyi vurgulamak için ALT tuşuna basarak menü çubuğunu etkin hale getirir. Menü görüntülendiğinde etkindir.
Bir menü öğesi için erişim anahtarı oluşturmak için, öğenin metin dizesindeki herhangi bir karakterin önüne ve işareti koyun. Örneğin, "&move" metin dizesi sistemin "M" harfinin altını çizmesine neden olur.
Menü Kısayol Tuşları
Bir menü öğesi, erişim tuşuna sahip olmanın yanı sıra onunla ilişkilendirilmiş bir kısayol tuşuna da sahip olabilir. Kısayol tuşunun çalışması için menünün etkin olması gerekmediğinden, kısayol tuşu erişim tuşundan farklıdır. Ayrıca, bir erişim tuşu her zaman bir menü öğesiyle ilişkilendirilirken, kısayol tuşu genellikle bir menü öğesiyle ilişkilendirilir (ancak olması gerekmez).
Kısayol tuşunu tanımlayan metin, menü öğesi metin dizesine eklenir. Kısayol metni, menü öğesi adının sağ tarafında, ters eğik çizgi ve sekme karakterinden (\t) sonra görünür. Örneğin, "&Close\tAlt+F4", kısayol tuşu olarak ALT+F4 tuş kombinasyonu ve erişim tuşu olarak "C" harfi olan Kapat komutunu temsil eder. Daha fazla bilgi için bkz. Klavye Hızlandırıcıları.
Menü Oluşturma
Menü şablonu veya menü oluşturma işlevlerini kullanarak menü oluşturabilirsiniz. Menü şablonları genellikle kaynak olarak tanımlanır. Menü şablonu kaynakları açıkça yüklenebilir veya bir pencere sınıfı için varsayılan menü olarak atanabilir. Menü şablonu kaynaklarını bellekte dinamik olarak da oluşturabilirsiniz.
Aşağıdaki konularda menü oluşturma işlemi ayrıntılı olarak açıklanmaktadır:
- Menü Şablonu Kaynakları
- Bellekteki Menü Şablonu
- Menü Kontrolleri
- Menü Oluşturma İşlevleri
- Menü Görüntüsü
- Pencere Sınıfı Menüleri
Menü Şablonu Kaynakları
Çoğu uygulama, menü şablonu kaynaklarını kullanarak menüler oluşturur. Menü şablonu, menü çubuğundaki öğeler ve tüm menüler dahil olmak üzere bir menü tanımlar. Menü şablonu kaynağı oluşturma hakkında bilgi için geliştirme araçlarınızla birlikte verilen belgelere bakın.
Bir menü şablonu kaynağı oluşturup uygulamanızın yürütülebilir dosyası (.exe) dosyasına ekledikten sonra, kaynağı belleğe yüklemek için LoadMenu işlevini kullanabilirsiniz. Bu işlev menüye bir tanıtıcı döndürür. Bu tanıtıcıyı daha sonra SetMenu işlevini kullanarak bir pencereye atayabilirsiniz. Alt pencere olmayan herhangi bir pencereye menü atayabilirsiniz.
Menülerin kaynak olarak uygulanması, bir uygulamanın birden çok ülkede/bölgede kullanılmak üzere yerelleştirilmesini kolaylaştırır. Uygulamanın kaynak kodu için değil, her dil için yalnızca kaynak tanımı dosyasının yerelleştirilmesi gerekir.
Bellekteki Menü Şablonu
Çalışma zamanında bellekte yerleşik olarak bulunan bir menü şablonundan menü oluşturulabilir. Örneğin, kullanıcının menüsünü özelleştirmesine izin veren bir uygulama, kullanıcının tercihlerine göre bellekte bir menü şablonu oluşturabilir. Uygulama daha sonra kullanmak üzere şablonu bir dosyaya veya kayıt defterine kaydedebilir. Bellekteki bir şablondan menü oluşturmak için LoadMenuIndirect işlevini kullanın. Menü şablonu biçimlerinin açıklamaları için bkz. Menü Şablonu Kaynakları.
Standart menü şablonu bir MENUITEMTEMPLATEHEADER yapısından ve ardından bir veya daha fazla MENUITEMTEMPLATE yapısından oluşur.
Genişletilmiş menü şablonu bir MENUEX_TEMPLATE_HEADER yapısından ve ardından bir veya daha fazla MENUEX_TEMPLATE_ITEM yapısından oluşur.
Menü Kontrolleri
Sistem her menü için benzersiz bir tanıtıcı oluşturur. Menü tutamacı, HMENU türünün değeridir. Bir uygulamanın menü işlevlerinin çoğunda bir menü tutamacı belirtmesi gerekir. Menüyü oluştururken veya bir menü kaynağı yüklerken menü çubuğunun tutamacını alırsınız.
Oluşturulan veya yüklenen bir menü için menü çubuğunun tutamacını almak amacıyla GetMenu işlevini kullanın. Menü öğesiyle ilişkilendirilmiş alt menüye tanıtıcı almak için GetSubMenu veya GetMenuItemInfo işlevini kullanın. Bir pencere menüsüne tanıtıcı almak için GetSystemMenu işlevini kullanın.
Menü Oluşturma İşlevleri
Menü oluşturma işlevlerini kullanarak çalışma zamanında menüler oluşturabilir veya mevcut menülere menü öğeleri ekleyebilirsiniz. CreateMenu işlevini kullanarak boş bir menü çubuğu ve CreatePopupMenu işlevini kullanarak boş bir menü oluşturabilirsiniz. MENUINFO yapısını kullanarak menü için bazı ayarlar bilgilerini kaydedebilirsiniz. Menünün ayarlarını almak veya geri almak için GetMenuInfo veya SetMenuInfo kullanın. Menüye öğe eklemek için InsertMenuItem işlevini kullanın. Eski AppendMenu ve InsertMenu işlevleri hala desteklenmektedir, ancak yeni uygulamalar için InsertMenuItem kullanılmalıdır.
Menü Görüntüsü
Menü yüklendikten veya oluşturulduktan sonra, sistemin görüntüleyebilmesi için önce bir pencereye atanması gerekir. Sınıf menüsü tanımlayarak menü atayabilirsiniz. Daha fazla bilgi için bkz . Pencere Sınıfı Menüleri. Menüye bir tutamacı CreateWindow veya CreateWindowEx işlevinin hMenu parametresi olarak belirterek veya SetMenu işlevini çağırarak da pencereye menü atayabilirsiniz.
Kısayol menüsünü görüntülemek için TrackPopupMenuEx işlevini kullanın. Kayan açılır menüler veya bağlam menüleri olarak da adlandırılan kısayol menüleri genellikle WM_CONTEXTMENU iletisi işlendiğinde görüntülenir.
Alt pencere olmayan herhangi bir pencereye menü atayabilirsiniz.
Eski TrackPopupMenu işlevi hala desteklenmektedir, ancak yeni uygulamalar TrackPopupMenuEx işlevini kullanmalıdır.
Pencere Sınıfı Menüleri
Bir pencere sınıfı kaydederken sınıf menüsü olarak adlandırılan varsayılan menüyü belirtebilirsiniz. Bunu yapmak için menü şablonu kaynağının adını sınıfı kaydetmek için kullanılan WNDCLASS yapısının lpszMenuName üyesine atarsınız.
Varsayılan olarak, her pencereye kendi pencere sınıfı için sınıf menüsü atanır, bu nedenle menüyü açıkça yüklemeniz ve her pencereye atamanız gerekmez. CreateWindowEx işlevine yapılan çağrıda farklı bir menü tutamacı belirterek sınıf menüsünü geçersiz kılabilirsiniz. Ayrıca , SetMenu işlevini kullanarak bir pencerenin menüsü oluşturulduktan sonra da değiştirebilirsiniz. Daha fazla bilgi için bkz. Pencere Sınıfları.
Menü Öğeleri
Aşağıdaki konularda, kullanıcı bir menü öğesi seçtiğinde sistemin ne yaptığı ve bir uygulamanın öğenin görünümünü ve işlevselliğini denetleme yolları açıklanır:
- Alt Menüleri Açan Komut Öğeleri ve Öğeler
- Menu-Item Tanımlayıcısı
- Menu-Item Konumu
- Menü Öğelerine Program Aracılığıyla Erişme
- Varsayılan Menü Öğeleri
- Seçili ve Menü Öğelerini Temizle
- Etkin, Gri ve Devre Dışı Menü Öğeleri
- Vurgulanan Menü Öğeleri
- Owner-Drawn Menü Öğeleri
- Menü Öğesi Ayırıcıları ve Satır Sonları
Komut Öğeleri ve Alt Menüleri Açan Öğeler
Kullanıcı bir komut öğesi seçtiğinde, sistem menünün sahibi olan pencereye bir komut iletisi gönderir. Komut öğesi pencere menüsündeyse, sistem WM_SYSCOMMAND iletisini gönderir. Aksi takdirde , WM_COMMAND iletisini gönderir.
Her alt menüyü açan menü öğesiyle ilişkili olan, karşılık gelen alt menüye ait bir tanıtıcıdır. Kullanıcı böyle bir öğeyi işaret ettiğinde sistem alt menüyü açar. Sahip penceresine komut iletisi gönderilmez. Ancak, sistem alt menüyü görüntülemeden önce sahip penceresine bir WM_INITMENUPOPUP iletisi gönderir. GetSubMenu veya GetMenuItemInfo işlevini kullanarak bir öğeyle ilişkili alt menüye tanıtıcı alabilirsiniz.
Menü çubuğu genellikle menü adlarını içerir, ancak komut öğeleri de içerebilir. Alt menü genellikle komut öğeleri içerir, ancak iç içe alt menüleri açan öğeler de içerebilir. Bu tür öğeleri alt menülere ekleyerek menüleri herhangi bir derinliğe iç içe yerleştirebilirsiniz. Kullanıcıya görsel bir ipucu sağlamak için sistem, bir alt menüyü açan menü öğesinin metninin sağındaki küçük oku otomatik olarak görüntüler.
Menu-Item Tanımlayıcısı
Her menü öğesiyle ilişkili, menü öğesi tanımlayıcısı olarak adlandırılan benzersiz, uygulama tanımlı bir tamsayıdır. Kullanıcı menüden bir komut öğesi seçtiğinde, sistem öğenin tanımlayıcısını bir WM_COMMAND iletisinin parçası olarak sahip penceresine gönderir. Pencere yordamı, iletinin kaynağını belirlemek için tanımlayıcıyı inceler ve iletiyi uygun şekilde işler. Ayrıca, menü işlevlerini çağırdığınızda tanımlayıcısını kullanarak bir menü öğesi belirtebilirsiniz; örneğin, bir menü öğesini etkinleştirmek veya devre dışı bırakmak için.
Alt menüleri açan menü öğelerinin tanımlayıcıları aynı komut öğeleri gibi olur. Ancak, bir menüden böyle bir öğe seçildiğinde sistem komut iletisi göndermez. Bunun yerine, sistem menü öğesiyle ilişkili alt menüyü açar.
Menü öğesinin tanımlayıcısını belirtilen konumda almak için GetMenuItemID veya GetMenuItemInfo işlevini kullanın.
Menu-Item Konumu
Benzersiz bir tanımlayıcıya sahip olmanın yanı sıra, menü çubuğundaki veya menüdeki her menü öğesinin benzersiz bir konum değeri vardır. Menü çubuğundaki en soldaki öğe veya menüdeki en üst öğe sıfır konumuna sahiptir. Sonraki menü öğeleri için konum değeri artırılır. Sistem, ayırıcılar da dahil olmak üzere bir menüdeki tüm öğelere bir konum değeri atar. Aşağıdaki çizimde, menü çubuğundaki ve menüdeki öğelerin konum değerleri gösterilmektedir.
Belirli bir menü öğesiyle ilgili bilgileri değiştiren veya alan bir menü işlevini çağırırken, öğeyi tanımlayıcısını veya konumunu kullanarak belirtebilirsiniz. Daha fazla bilgi için sonraki bölüme bakın.
Menü Öğelerine Program Aracılığıyla Erişme
Çoğu menü işlevi, konuma veya komuta göre bir menü öğesi belirtmenize olanak sağlar. Bazı işlevler arama algoritmasını göstermek için MF_BYPOSITION ve MF_BYCOMMAND bayraklarını kullanır; diğerlerinin açık bir fByPosition parametresi vardır. Menü öğesini konuma göre belirtirseniz, öğe numarası menüdeki sıfır tabanlı bir dizindir. Menü öğesini komutla belirtirseniz, menü ve alt menülerinde, menü tanımlayıcısı sağlanan öğe numarasına eşit olan bir öğe aranılır. Menü hiyerarşisindeki birden fazla öğe öğe numarasıyla eşleşiyorsa, hangisinin kullanıldığı belirtilmez. Menüleriniz yinelenen menü tanımlayıcıları içeriyorsa, bu belirsizlikten kaçınmak için konum tabanlı menü işlemlerini kullanmanız gerekir.
Varsayılan Menü Öğeleri
Alt menü bir varsayılan menü öğesi içerebilir. Kullanıcı çift tıklayarak bir alt menüyü açtığında, sistem menünün sahip penceresine bir komut iletisi gönderir ve varsayılan komut öğesi seçilmiş gibi menüyü kapatır. Varsayılan komut öğesi yoksa, alt menü açık kalır. Bir alt menü için varsayılan öğeyi almak ve ayarlamak için GetMenuDefaultItem ve SetMenuDefaultItem işlevlerini kullanın.
Seçili ve Boş Menü Öğeleri
Menü öğesi seçilebilir veya temizlenebilir. Sistem, seçili menü öğelerinin yanında bir bitmap görüntülüyor ve bunların seçili durumlarını gösteriyor. Uygulama tanımlı bir "temizle" bit eşlem belirtilmedikçe, sistem temiz ögelerin yanında bit eşlem göstermez. Yalnızca bir menüdeki menü öğeleri seçilebilir; menü çubuğundaki öğeler seçilemez.
Uygulamalar genellikle bir seçeneğin etkin olup olmadığını belirtmek için menü öğesini denetler veya temizler. Örneğin, bir uygulamanın bir menüde Araç Çubuğu komutunu kullanarak kullanıcının gösterebileceği veya gizleyebileceği bir araç çubuğu olduğunu varsayalım. Araç çubuğu gizlendiğinde Araç Çubuğu menü öğesi temizdir. Kullanıcı komutu seçtiğinde, uygulama menü öğesini denetler ve araç çubuğunu gösterir.
Onay işareti özniteliği, bir menü öğesinin seçilip seçilmediğini denetler. CheckMenuItem işlevini kullanarak bir menü öğesinin onay işareti özniteliğini ayarlayabilirsiniz. Menü öğesinin seçili mi yoksa temizlenmiş mi olduğunu belirlemek için GetMenuState işlevini kullanabilirsiniz.
CheckMenuItem ve GetMenuState yerine, menü öğesinin denetim durumunu almak ve ayarlamak için GetMenuItemInfo ve SetMenuItemInfo işlevlerini kullanabilirsiniz.
Bazen, bir grup menü öğesi birbirini dışlayan bir dizi seçeneğe karşılık gelir. Bu durumda, seçili bir radyo menü öğesini (radyo düğmesi denetimine benzer) kullanarak seçili seçeneği belirtebilirsiniz. Seçili radyo düğmeleri, onay işareti simgesi yerine madde işareti simgesi ile görüntülenir. Menü öğesini denetlemek ve radyo öğesi yapmak için CheckMenuRadioItem işlevini kullanın.
Varsayılan olarak, sistem seçili menü öğelerinin yanında bir onay işareti veya madde işareti bitmap görüntüler ve temizlenen menü öğelerinin yanında hiçbir bitmap görüntülemez. Ancak, uygulama tanımlı seçili ve temizlenmiş bit eşlemleri bir menü öğesiyle ilişkilendirmek için SetMenuItemBitmaps işlevini kullanabilirsiniz. Ardından sistem, menü öğesinin seçili veya temizlenmiş durumunu belirtmek için belirtilen bit eşlemleri kullanır.
Menü öğesiyle ilişkili uygulama tanımlı bit eşlemler, boyutları ekran çözünürlüğüne bağlı olarak değişebilen varsayılan onay işareti bit eşlemiyle aynı boyutta olmalıdır. Doğru boyutları almak için GetSystemMetrics işlevini kullanın. Farklı ekran çözünürlükleri için birden çok bit eşlem kaynağı oluşturabilirsiniz; bir bit eşlem kaynağı oluşturun ve gerekirse bunu ölçeklendirin; veya çalışma zamanında bir bit eşlem oluşturun ve içinde bir görüntü çizin. "Bitmap'ler tek renkli veya renkli olabilir." Ancak, menü öğeleri vurgulandığında ters çevrildiğinden, bazı ters renk bit eşlemlerinin görünümü istenmeyen olabilir. Daha fazla bilgi için bkz. Bitmapler.
Etkin, Gri ve Devre Dışı Menü Öğeleri
Menü öğesi etkinleştirilebilir, grileştirilebilir veya devre dışı bırakılabilir. Varsayılan olarak, bir menü öğesi etkinleştirilir. Kullanıcı etkin bir menü öğesi seçtiğinde, sistem sahip penceresine bir komut iletisi gönderir veya ne tür bir menü öğesi olduğuna bağlı olarak ilgili alt menüyü görüntüler.
Menü öğeleri kullanıcının kullanımına sunulmadığında gri renkte veya devre dışı bırakılmalıdır. Gri ve devre dışı menü öğeleri seçilemez. Devre dışı bırakılmış bir öğe, aynı etkin bir öğe gibi görünür. Kullanıcı devre dışı bırakılmış bir öğeye tıkladığında, öğe seçilmez ve hiçbir şey olmaz. Devre dışı bırakılan öğeler, örneğin etkin görünen ancak olmayan bir menü sunan bir öğreticide yararlı olabilir.
Uygulama, kullanıcıya bir komutun kullanılamadığıyla ilgili görsel bir ipucu sağlamak için kullanılamayan bir menü öğesini gri gösterir. Bir eylem uygun olmadığında gri bir öğe kullanabilirsiniz (örneğin, sistemde yüklü bir yazıcı olmadığında Dosyamenüsündeki Yazdır komutunu gri yapabilirsiniz).
EnableMenuItem işlevi bir menü öğesini etkinleştirir, gri gösterir veya devre dışı bırakır. Menü öğesinin etkin mi, gri mi yoksa devre dışı mı olduğunu belirlemek için GetMenuItemInfo işlevini kullanın.
GetMenuItemInfo yerine, menü öğesinin etkin, gri veya devre dışı olup olmadığını belirlemek için GetMenuState işlevini de kullanabilirsiniz.
Vurgulanan Menü Öğeleri
Sistem, kullanıcı menüleri seçtikçe menü öğelerini otomatik olarak vurgular. Ancak vurgulama, HiliteMenuItem işlevi kullanılarak menü çubuğundaki menü adından açıkça eklenebilir veya kaldırılabilir. Bu işlevin menülerdeki menü öğeleri üzerinde hiçbir etkisi yoktur. HiliteMenuItem bir menü adını vurgulamak için kullanıldığında, yalnızca ad seçilmiş gibi görünür. Kullanıcı ENTER tuşuna basarsa, vurgulanan öğe seçilmez. Bu özellik, örneğin menülerin kullanımını gösteren bir eğitim uygulamasında yararlı olabilir.
Owner-Drawn Menü Öğeleri
Uygulama, sahip tarafından çizilmiş bir öğeyi kullanarak menü öğesinin görünümünü tamamen denetleyebilir. Sahip tarafından çizilen öğeler, bir uygulamanın seçili (vurgulanmış), seçili ve temizlenmiş durumları çizmenin toplam sorumluluğunu almasını gerektirir. Örneğin, bir uygulama bir yazı tipi menüsü sağladıysa, her menü öğesini ilgili yazı tipini kullanarak çizebilir; Roman için olan öğe roman tipinde, İtalik için olan öğe ise italik tipinde çizilirdi. Daha fazla bilgi için bkz . Owner-Drawn Menü Öğeleri Oluşturma.
Menü Öğesi Ayırıcıları ve Satır Sonları
Sistem, yatay çizgi olarak görünen ayırıcı olarak adlandırılan özel bir menü öğesi türü sağlar. Menüyü ilgili öğe gruplarına bölmek için ayırıcı kullanabilirsiniz. Ayırıcı bir menü çubuğunda kullanılamaz ve kullanıcı bir ayırıcı seçemez.
Bir menü çubuğu bir satıra sığmayacak kadar çok menü adı içerdiğinde, sistem menü çubuğunu otomatik olarak iki veya daha fazla satıra bölerek sarmalar. Öğeye MFT_MENUBREAK tür bayrağı atayarak menü çubuğundaki belirli bir öğede satır sonu oluşmasına neden olabilirsiniz. Sistem bu öğeyi ve sonraki tüm öğeleri yeni bir satıra yerleştirir.
Bir menü bir sütuna sığmayacak kadar çok öğe içerdiğinde menü kısaltılır. Öğeye MFT_MENUBREAK tür bayrağı atayarak veya MENUITEM deyimindeki MENUBREAK seçeneğini kullanarak menüdeki belirli bir öğede sütun sonunun oluşmasına neden olabilirsiniz. Sistem bu öğeyi ve sonraki tüm öğeleri yeni bir sütuna yerleştirir. MFT_MENUBARBREAK türü bayrağı, yeni sütun ile eski sütun arasında dikey bir çizgi görünmesi dışında aynı etkiye sahiptir.
Satır sonları atamak için AppendMenu, InsertMenu veya ModifyMenu işlevlerini kullanırsanız, tür bayraklarını MF_MENUBREAK veya MF_MENUBARBREAK atamanız gerekir.
Menülerle Kullanılan İletiler
Sistem, menüye sahip olan pencerenin pencere yordamına ileti göndererek menüyle ilgili etkinliği raporlar. Kullanıcı menü çubuğundaki öğeleri seçtiğinde veya kısayol menüsünü görüntülemek için sağ fare düğmesine tıkladığında sistem bir dizi ileti gönderir.
Kullanıcı menü çubuğundaki bir öğeyi etkinleştirdiğinde, sahip penceresi önce bir WM_SYSCOMMAND iletisi alır. Bu ileti, kullanıcının klavyeyi (SC_KEYMENU) veya fareyi (SC_MOUSEMENU) kullanarak menüyü etkinleştirip etkinleştirmediğini gösteren bir bayrak içerir. Daha fazla bilgi için bkz. Menülere Klavye Erişimi.
Ardından, herhangi bir menüyü görüntülemeden önce sistem, bir uygulamanın menüleri kullanıcı görmeden önce değiştirebilmesi için WM_INITMENU iletisini pencere yordamına gönderir. Sistem WM_INITMENU iletisini menü etkinleştirme başına yalnızca bir kez gönderir.
Kullanıcı alt menüyü açan bir menü öğesini işaret ettiğinde, sistem alt menüyü görüntülemeden önce sahip penceresine WM_INITMENUPOPUP iletisini gönderir. Bu ileti, uygulamaya görüntülenmeden önce alt menüyü değiştirme fırsatı verir.
Kullanıcı vurguyu bir öğeden diğerine her hareket ettirdiğinde, sistem menünün sahibi olan pencerenin pencere yordamına WM_MENUSELECT iletisi gönderir. Bu ileti seçili durumdaki menü öğesini tanımlar. Birçok uygulama, ana pencerelerinin alt kısmında bir bilgi alanı sağlar ve seçili menü öğesi hakkında ek bilgileri görüntülemek için bu iletiyi kullanır.
Kullanıcı menüden bir komut öğesi seçtiğinde, sistem pencere yordamına bir WM_COMMAND iletisi gönderir. WM_COMMAND iletisinin wParam parametresinin düşük sıralı sözcüğü, seçilen öğenin tanımlayıcısını içerir. Pencere yordamı tanımlayıcıyı incelemeli ve iletiyi uygun şekilde işlemelidir.
MENUINFO yapısını kullanarak bir menünün bilgilerini kaydedebilirsiniz. Menü, MENUINFO içinde MNS_NOTIFYBYPOS dwStyle değeri ile tanımlandığında, bir öğe seçildiğinde sistem WM_COMMAND yerine WM_MENUCOMMAND gönderir. Bu, MENUINFO yapısındaki bilgilere erişmenizi sağlar ve ayrıca seçilen öğenin dizinini doğrudan sağlar.
Tüm menülere pencerenin menü çubuğundan erişilemez. Birçok uygulama, kullanıcı belirli bir konumda sağ fare düğmesine tıkladığında kısayol menülerini görüntüler. Bu tür uygulamalar WM_CONTEXTMENU iletisini işlemeli ve uygunsa bir kısayol menüsü görüntülemelidir. Bir uygulama bir kısayol menüsü görüntülemiyorsa, varsayılan işleme için WM_CONTEXTMENU iletisini DefWindowProc işlevine iletmesi gerekir.
WM_MENURBUTTONUP iletisi, imleç bir menü öğesindeyken kullanıcı sağ fare düğmesini serbest bıraktığında gönderilir. Bu ileti, uygulamaların bir menü öğesi için bağlama duyarlı veya kısayol menüsü görüntüleyebilmesi için sağlanır.
Yalnızca sürükle ve bırak menülerini içeren birkaç ileti vardır. WM_MENUGETOBJECT, fare imleci bir menü öğesine girdiğinde veya öğenin ortasından öğenin üstüne veya altına geçtiğinde sürükleyip bırakma menüsünün sahibine gönderilir. kullanıcı gerçekten bir menü öğesini sürüklediğinde WM_MENUDRAG iletisi gönderilir.
Açılan menü veya alt menü yok edildiğinde sistem bir WM_UNINITMENUPOPUP iletisi gönderir.
Menü Yok Etme
Bir pencereye menü atanırsa ve bu pencere yok edilirse, sistem menüyü ve alt menülerini otomatik olarak yok eder ve menünün tutamacını ve menünün kapladığı belleği serbest bırakır. Sistem, pencereye atanmamış bir menüyü otomatik olarak yok etmez. Bir uygulamanın DestroyMenu işlevini çağırarak atanmamış menüyü yok etmesi gerekir. Aksi takdirde, uygulama kapatıldıktan sonra bile menü bellekte varolmaya devam eder. Çağıran iş parçacığının etkin menüsünü sonlandırmak için EndMenu kullanın. Platform EndMenu'yi desteklemiyorsa etkin menünün sahibine bir WM_CANCELMODE iletisi gönderin.