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.
Birleşik giriş kutusu, düzenleme kutusunu veya statik metni ve listeyi birleştirir.
Bu konu aşağıdaki bölümleri içerir.
- Birleşik Giriş Kutusu Türleri ve Stilleri
- Kombinasyon Kutusu Listesi
- Denetim Seçimi Alanlarını Düzenle
- Owner-Drawn Birleşik Giriş Kutuları
- Alt Sınıf Combo Kutuları
Kombinasyon Kutusu Türleri ve Stilleri
Birleşik giriş kutusu bir liste ve seçim alanından oluşur. Liste, kullanıcının seçebileceği seçenekleri sunar ve seçim alanında geçerli seçim görüntülenir. Seçim alanı bir düzenleme denetimiyse, kullanıcı listede bulunmayan bilgileri girebilir; aksi takdirde, kullanıcı yalnızca listedeki öğeleri seçebilir.
Ortak denetim kitaplığı, aşağıdaki tabloda gösterildiği gibi üç ana açılır kutu stili içerir.
| Kombinasyon kutusu türü | Stil sabiti | Açıklama |
|---|---|---|
| Basit | CBS_SIMPLE | Listeyi her zaman görüntüler ve seçili öğeyi düzenleme denetiminde gösterir. |
| Açılan menü | CBS_DROPDOWN | Simgeye tıklandığında listeyi görüntüler ve seçili öğeyi düzenleme denetiminde gösterir. |
| Açılan liste (açılan liste) | CBS_DROPDOWNLIST | Simgeye tıklandığında listeyi görüntüler ve seçili öğeyi statik denetimde gösterir. |
Aşağıdaki ekran görüntülerinin her biri, Windows Vista'da açılır liste kutusunun üç türünün nasıl görünebileceğini gösterir. İlk ekran görüntüsünde kullanıcı, basit bir açılır kutuda bir öğe seçmiştir. Kullanıcı, bu denetimin düzenleme kutusuna yeni bir değer de yazabilir. Liste Microsoft Visual Studio kaynak düzenleyicisinde boyutlandırılmıştır ve yalnızca iki öğeyi barındıracak kadar büyüktür.
Basit bir açılır kutuda seçilen bir öğeyi gösteren 
İkinci ekran görüntüsünde, kullanıcı açılır birleşik liste kutusunun düzenleme alanına yeni metin yazdı. Kullanıcı var olan bir öğeyi de seçmiş olabilir. Liste kutusu, mümkün olduğunca çok öğeyi barındıracak şekilde genişler.
Açılan birleşik giriş kutusuna yazılan metnin gösterildiği 
Üçüncü ekran görüntüsünde, kullanıcı açılan liste açılır menü kutusunu açtı. Liste kutusu, mümkün olduğunca çok öğeyi barındıracak şekilde genişler. Kullanıcı yeni metin giremiyor.
Açılan birleşik kutudaki bir listeden seçilen öğeyi gösteren 
Belirli özellikleri tanımlayan bir dizi birleşik kutu stili de vardır. Birleşik giriş kutusu stilleri, birleşik giriş kutusunun belirli özelliklerini tanımlar. Stilleri birleştirebilirsiniz; ancak bazı stiller yalnızca belirli açılır liste türlerine uygulanır. Birleşik giriş kutusu stilleri tablosu için bkz. Birleşik Giriş Kutusu Stilleri.
Not
Birleşik giriş kutularıyla görsel stilleri kullanmak için uygulamanın bir bildirim içermesi ve programın başında InitCommonControls çağırması gerekir. Görsel stilleri hakkında bilgi için bkz. Görsel Stilleri. Bildirimler hakkında bilgi için bkz. Görsel Stilleri Etkinleştirme.
Birleşik Giriş Kutusu Listesi
Liste, açılır menünün kullanıcının seçebileceği öğeleri gösteren kısmıdır. Genellikle, bir uygulama açılır liste kutusu oluşturduğunda listenin içeriğini ayarlar. Kullanıcı tarafından seçilen herhangi bir liste öğesi, geçerliseçimdir. Birden çok öğe seçilemez. Basit ve açılır birleşik kutularda, kullanıcı bir liste öğesi seçmek yerine giriş alanına yazabilir. Bu gibi durumlarda, geçerli bir seçim yoktur ve öğeyi listeye eklemek ve uygunsa geçerli seçim yapmak uygulamanın sorumluluğundadır.
Bu bölümde aşağıdaki konular ele alınmaktadır:
Geçerli Seçim
Geçerli seçim, kullanıcının seçtiği bir liste öğesidir; seçili metin birleşik giriş kutusunun seçim alanında görünür. Ancak, basit bir birleşik giriş kutusu veya açılan birleşik giriş kutusu söz konusu olduğunda, geçerli seçim bir birleşik giriş kutusundaki olası kullanıcı girişinin yalnızca bir biçimidir. Kullanıcı seçim alanına metin de yazabilir.
Geçerli seçim, seçili liste öğesinin sıfır tabanlı diziniyle tanımlanır. Bir uygulama herhangi bir zamanda ayarlayabilir ve alabilir. Ana pencere veya iletişim kutusu yordamı, kullanıcı açılır liste kutusu için geçerli seçimi değiştirdiğinde bildirim alır. Uygulama seçimi değiştirdiğinde üst pencere veya iletişim kutusuna bildirimde bulunulamaz.
Birleşik giriş kutusu oluşturulduğunda, henüz geçerli bir seçim yoktur. Bu, kullanıcı seçim alanının içeriğini düzenlemişse, basit veya hatta açılır menü kombinasyon kutusu için de geçerlidir. Geçerli seçimi ayarlamak için uygulama CB_SETCURSEL iletisini açılır kutuya gönderir. Bir uygulama, geçerli seçimi, dizesi belirtilen bir dizeyle başlayan bir liste öğesi olarak ayarlamak için CB_SELECTSTRING iletisini de kullanabilir. Geçerli seçimi belirlemek için uygulama CB_GETCURSEL iletisini birleşik giriş kutusuna gönderir. Geçerli bir seçim yoksa, bu ileti CB_ERR döndürür.
Kullanıcı birleşik giriş kutusundaki geçerli seçimi değiştirdiğinde, ebeveyn pencere veya iletişim kutusu prosedürü, wParam parametresinin yüksek sıralı sözcüğünde CBN_SELCHANGE bildirim kodunu içeren bir WM_COMMAND mesajı alır. Geçerli seçim CB_SETCURSEL iletisi kullanılarak ayarlandığında bu bildirim kodu gönderilmez.
Açılır liste kutusu, açılan liste kapatıldığında CBN_CLOSEUP bildirim kodunu üst pencereye veya iletişim kutusu yordamına gönderir. Kullanıcı geçerli seçimi değiştirdiyse açılan liste kapatıldığında açılır kutu CBN_SELCHANGE bildirim kodunu da gönderir. Kullanıcı bir liste öğesini her seçtiğinde belirli bir işlemi yürütmek için CBN_SELCHANGE veya CBN_CLOSEUP bildirim kodunu işleyebilirsiniz. Genellikle, geçerli seçimdeki bir değişikliği işlemeden önce CBN_CLOSEUP bildirim kodunu beklersiniz. Önemli miktarda işleme gerekiyorsa bu özellikle önemli olabilir.
Bir uygulama CBN_SELENDOK ve CBN_SELENDCANCEL bildirim kodlarını da işleyebilir. Kullanıcı bir liste öğesi seçtiğinde veya bir öğe seçip listeyi kapattığında sistem CBN_SELENDOK gönderir. Bu, kullanıcının tamamlandığını ve seçimin işlenmesi gerektiğini gösterir. CBN_SELENDCANCEL, kullanıcı bir öğe seçtiğinde, ancak başka bir denetim seçtiğinde, açılan liste açıkken ESC tuşuna bastığında veya iletişim kutusunu kapattığında gönderilir. Bu, kullanıcının seçiminin yoksayılması gerektiğini gösterir. CBN_SELENDOK, her CBN_SELCHANGE mesajından önce gönderilir.
Basit bir combo kutusunda, kullanıcı bir liste öğesine çift tıklarsa, sistem CBN_DBLCLK bildirim kodunu gönderir. Açılan birleşik kutuda veya açılan listede, tek bir tıklama listeyi gizler, bu nedenle bir öğeye çift tıklamak mümkün değildir.
Açılan Listeler
Bazı bildirimler ve iletiler yalnızca açılır listeler içeren combo kutularına uygulanır. Açılır liste açık veya kapalı olduğunda, combo kutusunun üst penceresi WM_COMMAND iletisi biçiminde bir bildirim alır. Liste açılıyorsa, wParam'nin yüksek sıralı sözcüğü CBN_DROPDOWN. Eğer liste kapatılıyorsa, bu CBN_CLOSEUPdemektir.
Uygulama, CB_SHOWDROPDOWN iletisini kullanarak açılır kutu veya açılan liste kutusunun listesini açabilir. CB_GETDROPPEDSTATE iletisini kullanarak listenin açık olup olmadığını belirleyebilir ve CB_GETDROPPEDCONTROLRECT iletisini kullanarak açılan listenin koordinatlarını belirleyebilir. Bir uygulama, CB_SETDROPPEDWIDTH iletisini kullanarak açılan listenin genişliğini de artırabilir.
Liste İçeriği
Bir uygulama birleşik giriş kutusu oluşturduğunda, genellikle listeye bir veya daha fazla öğe ekleyerek birleşik giriş kutusunu başlatır. Daha sonra bir uygulama liste öğelerini ekleyebilir veya silebilir, listeyi yeniden başlatabilir veya öğe bilgilerini oradan alabilir.
Uygulama, CB_ADDSTRING mesajını göndererek liste öğelerini açılır listeye ekler. Belirtilen öğe, listenin sonuna veya sıralı birleşik kutuda, öğenin dizesine göre doğru sıralanmış konumuna eklenir. Sıralanmamış birleşik giriş kutusunda, uygulama belirli bir konuma öğe eklemek için CB_INSERTSTRING iletisini kullanabilir. Eklendikten sonra, bir liste öğesi konumuna göre tanımlanır.
Bir uygulama, CB_FINDSTRING veya CB_FINDSTRINGEXACT iletisini kullanarak liste öğesinin konumunu belirleyebilir. CB_FINDSTRING, dizesi belirtilen dizeyle başlayan bir öğe bulur. CB_FINDSTRINGEXACT dizesi dizeyle tam olarak eşleşen bir öğe bulur. her iki ileti de büyük/küçük harfe duyarlı değildir.
Bir uygulama, CB_DELETESTRING iletisini kullanarak liste öğesini kaldırabilir. Bir uygulamanın birleşik giriş kutusu listesini yeniden başlatması gerekiyorsa, önce CB_RESETCONTENT iletisini kullanarak tüm içeriğini temizleyebilir. Birleşik giriş kutusu zaten gösterildikten sonra listeye birden çok öğe eklerken, uygulama her öğe eklendikten sonra birleşik giriş kutusunun yeniden boyanmasını önlemek için yeniden çiz bayrağını temizleyebilir. Yeniden çizme hakkında daha fazla bilgi için WM_SETREDRAW iletisinin açıklamasına bakın.
Bir liste öğesiyle ilişkili dizeyi almak için bir uygulama CB_GETLBTEXT iletisini kullanabilir. Öğenin dizesi, uygulamanın belirttiği arabelleğe kopyalanır. Dizgenin uzunluğunu almak için arabelleğin yeterince büyük olup olmadığından emin olmak amacıyla, uygulama önce CB_GETLBTEXTLEN iletisini kullanabilir. Birleşik kutudaki liste öğelerinin sayısını almak için bir uygulama CB_GETCOUNT iletisini kullanabilir.
Denetim Seçimi Alanlarını Düzenle
Bir uygulama seçim alanının içeriğini alabilir veya ayarlayabilir ve düzenleme seçimini belirleyebilir veya ayarlayabilir. Uygulama, kullanıcının seçim alanına yazabileceği metin miktarını da sınırlayabilir. Seçim alanının içeriği değiştiğinde, sistem üst pencereye veya iletişim kutusu yordamına bildirim iletileri gönderir.
Bir uygulama, seçim alanının içeriğini almak için WM_GETTEXT iletisini birleşik giriş kutusuna gönderebilir. Bir uygulama, basit veya açılan bir kombo kutusunun seçim alanını ayarlamak için WM_SETTEXT iletisini kombo kutusuna gönderebilir.
Düzenleme alanı, basit veya açılır bir birleşik kutunun seçim alanındaki seçili metin aralığıdır (varsa). Bir uygulama, CB_GETEDITSEL iletisini kullanarak geçerli seçimin başlangıç ve bitiş karakter konumlarını belirleyebilir. Ayrıca, CB_SETEDITSEL iletisini kullanarak düzenleme seçimindeki karakterleri de seçebilir.
Başlangıçta, kullanıcının seçim alanına yazabileceği metin miktarı, seçim alanının boyutuyla sınırlıdır. Bununla birlikte, birleşik giriş kutusunda CBS_AUTOHSCROLL stili varsa, metin seçim alanının boyutunun ötesinde devam edebilir. Bir uygulama, denetimin CBS_AUTOHSCROLL stiline sahip olup olmadığına bakılmaksızın kullanıcının seçim alanına yazabileceği metin miktarını sınırlamak için CB_LIMITTEXT iletisini kullanabilir.
Kullanıcı seçim alanının içeriğini düzenlediğinde, üst pencere veya iletişim kutusu yordamı bildirim iletileri alır. İlk olarak CBN_EDITUPDATE bildirim kodu gönderilir ve seçim alanındaki metnin düzenlendiğini belirtir. Değiştirilen metin görüntülendikten sonra sistem CBN_EDITCHANGEgönderir. Seçilen liste öğesinin sonucu olarak seçim alanı içeriği değiştiğinde, bu iletiler gönderilmez.
Owner-Drawn Kombo Kutuları
Uygulama, liste öğelerini çizim sorumluluğunu üstlenmek için kullanıcı tanımlı bir açılır liste kutusu oluşturabilir. Sahip çizimli açılır liste kutusunun (sahibi) ana penceresi, açılır liste kutusunun bir bölümünün boyanması gerektiğinde WM_DRAWITEM mesajlarını alır. Kullanıcı tarafından özelleştirilmiş açılır kutu, metin dizeleri dışında veya onlara ek olarak bilgileri listeleyebilir. Kullanıcı tarafından oluşturulan açılır kutular herhangi bir türde olabilir. Ancak, basit veya açılır birleşik giriş kutusundaki düzenleme denetimi yalnızca metin görüntüleyebilirken, kontrol sahibi seçim alanını açılır liste kutusuna çizer.
Özel çizimli kombi kutusunun sahibi, WM_DRAWITEM iletisini işlemelidir. Bu ileti, kombine kutunun bir bölümünün yeniden çizilmesi gerektiğinde gönderilir. Birleşik kutu için belirtilen stillere bağlı olarak, sahibin diğer iletileri işlemesi gerekebilir.
Uygulama, CBS_OWNERDRAWFIXED veya CBS_OWNERDRAWVARIABLE stilini belirterek sahip tarafından çizilen bir açılır kutu oluşturabilir. Birleşik kutudaki tüm liste öğeleri, dizeler veya simgeler gibi aynı yükseklikte ise, uygulama CBS_OWNERDRAWFIXED stilini kullanabilir. Liste öğeleri farklı boyutta bit eşlemler gibi değişen yüksekliğe sahipse, uygulama CBS_OWNERDRAWVARIABLE stilini kullanabilir.
Sahip tarafından çizilen açılır listenin sahibi, açılır listedeki liste öğelerinin boyutlarını belirtmek için WM_MEASUREITEM iletisini işleyebilir. Uygulama, CBS_OWNERDRAWFIXED stilini kullanarak bir açılır kutu oluşturursa, sistem WM_MEASUREITEM iletisini yalnızca bir kez gönderir. Sahip tarafından belirtilen boyutlar tüm liste öğeleri için kullanılır. CBS_OWNERDRAWVARIABLE stili kullanılırsa, sistem birleşik giriş kutusuna eklenen her liste öğesi için bir WM_MEASUREITEM iletisi gönderir. Sahip, sırasıyla CB_GETITEMHEIGHT ve CB_SETITEMHEIGHT iletilerini kullanarak istediğiniz zaman liste öğesinin yüksekliğini belirleyebilir veya ayarlayabilir.
Sahip çizimli açılır kutuda görüntülenen bilgiler metin içeriyorsa, uygulama CBS_HASSTRINGS stilini belirterek her liste öğesi için metni izleyebilir. CBS_SORT stiline sahip açılır kutular bu metne göre sıralanır. Birleşik giriş kutusu CBS_HASSTRINGS stilinde değil de sıralanmışsa, sahibin WM_COMPAREITEM iletisini işlemesi gerekir.
Kullanıcı tarafından çizilmiş birleşik giriş kutusunda, kullanıcının metin dışında veya metne ek olarak bilgi içeren liste öğelerini takip etmesi gerekir. Bunu yapmanın kullanışlı bir yolu, bir bilginin tanıtıcısını öğe verisi olarak kaydetmektir. Bir birleşik giriş kutusundaki öğelerle ilişkili veri nesnelerini boşaltmak için, sahip WM_DELETEITEM iletisini işleyebilir.
Alt Sınıf birleşik giriş kutuları
Alt sınıflandırma, bir uygulamanın pencereye gönderilen veya yollanan iletileri kesmesine ve işlemesine olanak tanıyan bir yordamdır. Bir uygulama, alt sınıflama kullanarak belirli iletiler için kendi işlemesinin yerini alabilir ve ileti işlemenin çoğunu sınıf tanımlı pencere yordamına bırakabilir.
İşletim sistemi bir pencere oluşturduğunda, bu pencere hakkındaki bilgileri pencere yordamına bir işaretçi içeren bir iç veri yapısına kaydeder. Bir pencereye alt sınıf eklemek için, uygulama, bu işlemi sağlayan işlev göstergesini, uygulama tarafından tanımlanan alt sınıf prosedürüne yönlendiren işaretçiyle değiştirmek için SetClassLong işlevini çağırır. Bundan sonra, pencereye gönderilen tüm iletiler alt sınıf yordamına gönderilir. Bu yordam daha sonra CallWindowProc işlevini kullanarak işlenmemiş iletileri özgün pencere yordamına geçirir. COMBOBOX sınıfı pencere yordamı tarafından gerçekleştirilen ileti işlemenin açıklaması için bkz. Varsayılan Birleşik Giriş Kutusu Davranışı.
Birleşik giriş kutusu bir iletişim kutusunun dışındayken, bir uygulama alt sınıf prosedürü kullanmadığı sürece SEKME, ENTER ve ESC tuşlarını işleyemez. Basit veya açılır bir bileşik kutu giriş odağını aldığında, odağı hemen alt düzenleme kontrolüne ayarlar. Bu nedenle, bir uygulamanın basit veya açılan bir birleşik giriş kutusu için klavye girişini kesmek için düzenleme denetimini alt sınıfına alması gerekir. Bunun bir örneği için bkz. Combo BoxAlt Sınıflama.
Alt sınıf yordamı WM_PAINT iletisini işlerse, boyamaya hazırlanmak için beginpaintişlevini kullanmalıdır. EndPaint işlevini çağırmadan önce, cihaz bağlamı (DC) tutamacını pencere yordamı için wParam parametresi olarak geçirir. Eğer ilk olarak EndPaint çağrılırsa, EndPaint tüm pencereyi doğruladığı için sınıf pencere yordamı boyama yapmaz.
Alt sınıflamayla ilgili bir teknik, üst sınıflamadır. Bir üst sınıf, pencere yordamının işlenmemiş iletileri işlemek için DefWindowProc çağırmaması dışında diğer sınıflara benzer. Bunun yerine, işlenmemiş iletileri üst pencere sınıfının pencere yordamı fonksiyonuna geçirir. Alt sınıflama ve üst sınıflama ile ilgili problemlerin önüne geçmek için Pencere Yordamları'daki yönergeleri takip edin.