|
Bu yazımızda, ’Button ismiyle bilinen düğme standart kontrolünü, bu kontrolün API fonksiyonları ile oluşturulmasını, kontrole gönderilen ve kontrolden gelen mesajların işlenmesini inceleyeceğiz. Windows sistemlerinin, kullanıcı ile uygulama programlarının haberleşmesini sağlayabilmek için sunduğu kontrollerden birisi de düğme kontrolüdür. Kullanıcı düğme kontrolünü kullanarak, uygulama içerisinde belli bir işlemi başlatabilir, bir işleme onay verebilir, bir işlemden vazgeçebilir. Düğme kontrolü üzerine fare ile bir kez basıldığında, kontrol basılı hale geçer. Farenin tuşunu serbest bıraktığımızda ise kontrol normal konumuna geri döner.
Windows sistemleri beş çeşit düğme kontrolü sunarlar. Bu kontrollerin hepsi aynı pencere sınıf ismi (button) kullanılarak oluşturulur. Bu düğme kontrollerinin birbirinden ayırt edilmesi için birkaç pencere biçimi sembolik sabiti tanımlanmıştır. Ayrıca her düğme kontrolü türü de, kendisine ilişkin bazı pencere biçimlerine sahip olabilir. Kullanıcı fare ya da klavye yoluyla düğme kontrolünü seçili / seçilmemiş duruma getirebilir. Düğmenin görünümü ve durumu, düğmenin kendisi, uygulama ve Windows tarafından belirlenir. Düğme kontrolleri üst pencerelerine mesaj gönderebilir ve üst pencereden gelen mesajları alabilirler. Düğme kontrolleri şunlardır :
* Basma düğmesi (Push button)
* Seçenek kutusu (Check box)
* Seçenek düğmesi (Radio button)
* Grup kutusu (Group boxes)
* Kullanıcı - tanımlı düğmeler (Owner-drawn buttons)
Bu düğme kontrollerinin hepsinin ayrı ayrı stilleri vardır. Düğme kontrolü yaratılırken, stil parametresi yerine geçilen sembole bakılarak hangi türde düğme kontrolü yaratılacağına karar verilir. Bu kontrollerin ekranda nasıl göründüğüne bakalım :
Şimdi düğme kontrolü türlerini sırayla inceleyelim :
1. Basma Düğmeleri (Push Buttons)
Basma düğmesi, uygulama tanımlı bir başlık yazısı, bir ikon, bir bitmap içeren bir dikdörtgendir. Basma düğmesi iki biçimde olabilir; standart (standard) veya varsayılan (default) biçimler. Bu biçimler, BS_PUSHBUTTON ve BS_DEFPUSHBUTTON sabitleri ile belirlenir. Standart basma düğmesi genellikle bir işlemi başlatmak amacıyla kullanılır. Kullanıcı kontrolü seçtiği zaman, klavye kontrole odaklanır. Varsayılan basma düğmesi genellikle sıkça kullanılan veya varsayılan halde kullanılan seçenekler belirtmek için kullanılır. Kullanıcı ENTER tuşuna bastığı zaman kontrol seçilir. Kullanıcı düğme kontrolünü seçtiği zaman, kontrol Windows’tan klavye odağını alır, kontrolün ana penceresine BN_CLICKED bilgi mesajını içeren WM_COMMAND mesajı iletilir.
2.Seçenek Kutusu Düğmeleri (Check Boxes
Seçenek kutusu, uygulama tanımlı bir başlık yazısı, bir ikon, bir bitmap ile birlikte kare şeklinde bir kutudan oluşur. Seçenek kutuları, kullanıcının birbiri ile ilişkili ancak birbirinden bağımsız olan seçenekleri seçmesi için kullanılır. Aralarında mantıksal ilişki olan seçenek kutuları, genellikle bir grup kutusu içerisinde toplanır. Seçenek kutusu, dört biçimde olabilir; standart (standard), otomatik (automatic), 3-durumlu (three-state) ve otomatik 3-durumlu (automatic three-state) biçimler. Bu biçimler sırayla, BS_CHECKBOX, BS_AUTOCHECKBOX, BS_3STATE ve BS_AUTO3STATE sabitleri ile belirlenir. Bu biçimlerin her birisi iki işaret durumuna sahiptir : seçili olma durumu, seçilmemiş olma durumu. Üç durumlu seçenek kutusu, bu durumlara ilave olarak, belirsiz bir duruma sahiptir. Bu durumda iken kontrol gri renkte görüntülenir. Standart ve otomatik seçenek kutularının seçilmesi ile kontroller işaretli duruma, tekrar seçildiklerinde işaretlenmemiş duruma getirilir. Üç durumlu seçenek kutularının seçilmesi ile kontrol işaretli duruma, tekrar seçildiklerinde işaretlenmemiş duruma, tekrar seçildiklerinde ise belirsiz duruma getirilir. Kullanıcı herhangi türden bir seçenek kutusunu seçtiği zaman, kontrol Windows’tan klavye odağını alır ve kontrolün ana penceresine BN_CLICKED bilgi mesajını içeren WM_COMMAND mesajı iletilir. Ana pencere kontrolün otomatik bir seçenek kutusu mu, yoksa otomatik 3-durumlu bir seçenek kutusu mu olduğunu bilmez. Çünkü bu türdeki seçenek kutularının işaret durumları Windows tarafından otomatik bir şekilde ayarlanır. Ancak ana pencere, mesajın bir seçenek kutusundan mı, yoksa 3-durumlu bir seçenek kutusundan mı geldiğini bilmelidir; çünkü bu türdeki seçenek kutularının işaret durumlarını Windows otomatik olarak ayarlamaz. Seçenek kutusu hangi türde olursa olsun, işaret durumu değiştiği zaman, Windows tarafından otomatik olarak yeniden çizilir.
3. Seçenek Düğmeleri (Radio Buttons)
Seçenek düğmesi, uygulama tanımlı bir başlık yazısı, bir ikon, bir bitmap ile çember seklinde bir düğmeden oluşur. Seçenek düğmeleri, kullanıcının birbirleri ile ilişkili ve buna ek olarak birbirlerine bağımlı birkaç seçenekten birisini seçmesi için kullanılır. Kullanıcı seçeneklerden birisini seçtiğinde, diğer seçeneklerin seçilememesi gereklidir. Seçenek düğmesi iki biçimde olabilir; standart (standard) veya otomatik (automatic). Bu biçimler sırayla, BS_RADIOBUTTON ve BS_AUTORADIOBUTTON sabitleriyle belirlenir. Her iki türdeki kontrol için de, iki işaret durumu vardır : işaretli (düğme içerisine bir nokta çizilir) veya işaretlenmemiş (düğme içerisi boş bırakılır). Kullanıcı seçenek düğmesini seçtiği zaman, kontrol Windows’tan klavye odağını alır ve kontrolün ana penceresine BN_CLICKED bilgi mesajını içeren WM_COMMAND mesajı gönderilir. Ana pencere mesajın otomatik seçenek düğmesinden mi geldiğini bilmez; çünkü otomatik seçenek düğmesinin işaret durumu Windows tarafından ayarlanır. Ancak eğer mesaj normal bir seçenek düğmesinden geliyorsa, Windows bunu bilmek zorundadır; çünkü bu tür için işaret durumu Windows tarafından ayarlanmaz. Seçenek düğmesi hangi türde olursa olsun, işaret durumu değiştiği zaman, Windows tarafından otomatik olarak yeniden çizilir.
4.Kullanıcı-Tanımlı Düğmeler (Owner-Drawn Buttons)
Kullanıcı-tanımlı düğmeler, Windows tarafından değil, uygulama tarafından çizilir. Bu kontroller için önceden tanımlanmış görünümler mevcut değildir, görünümleri ve davranışları tamamen uygulamaya bağlıdır. Bu kontrol için tek bir biçim tanımlanmıştır, o da BS_OWNERDRAW sabiti kullanılarak oluşturulur. Kontrol seçildiğinde, ana pencereye Windows tarafından BN_CLICKED bilgi mesajını içeren WM_COMMAND mesajı gönderilir.
5.Grup Kutuları (Group Boxes)
Grup kutusu, sol üst köşesinde başlık yazısı bulunan, bir veya birkaç tane kontrolü içinde bir arada bulunduran dikdörtgen şeklinde bir kontroldür. Grup kutuları, aralarında mantıksal ilişki bulunan birkaç kontrolü bir arada göstermek amacıyla kullanılır. Bu kontrol için de tek bir biçim tanımlanmıştır, o da BS_GROUPBOX sabiti kullanılarak oluşturulur. Bu kontrole mesaj gönderilemez, kontrolün işaretli olma/işaretsiz olma gibi durumları da mevcut değildir.
Düğme kontrolleri yaratılırken CreateWindow ya da CreateWindowEx fonksiyonuna pencere biçimi parametresi olarak geçilen pencere sınıf ismi ’button’dur. Pencere başlığı parametresi olarak geçtiğimiz karakter katarı ise, düğme kontrolü üzerinde görüntülenecek yazıyı belirtir. Üçüncü parametre yerine geçeceğimiz pencere biçimi ise, yaratmak istediğimiz düğme kontrolünü belirten bir pencere biçimi sabiti olmalıdır. Windows sistemlerinde, düğme kontrolleri için tanımlanmış pencere biçimi sembolik sabitleri BS_ öneki ile başlatılmışlardır. Bu pencere biçimi sembolik sabitlerini inceleyelim :
Düğme Kontrolüne İlişkin Pencere Biçimleri
|
DÜĞME KONTROLÜ PENCERE BİÇİMİ SEMBOLİK SABİT İSMİ
|
ANLAMI
|
| BS_3STATE |
Seçenek kutusuna benzer bir kontrol oluşturmak için kullanılır. Standart seçenek kutusundan farkı, kontrolün seçili olup olmaması durumuna bağlı olarak, kontrolün renginin gri yapılmasıdır. Kontrol seçili değilse, rengi gri olur. |
| BS_AUTO3STATE |
BS_3STATE sabiti ile oluşturulan seçenek kutusuna benzer bir kontrol oluşturmak için kullanılır. Bu kontrolden farkı ise, kontrolün durumunu kullanıcının seçip seçmemesine bağlı olarak değiştirmesidir. Kontrolün üç durumu vardır; işaretli olması durumu (checked), gri renkte olması durumu (grayed) ve işaretli olmaması durumu (unchecked). |
| BS_AUTO3CHECKBOX |
Seçenek kutusuna benzer bir kontrol oluşturmak için kullanılır. Standart seçenek kutusundan farkı, kontrolün durumunu, kullanıcının kontrolü seçip seçmemesine bağlı olarak otomatik bir şekilde değiştirmesidir. |
| BS_AUTORADIOBUTTON |
Seçenek düğmesine benzer bir kontrol oluşturmak için kullanılır. Standart seçenek düğmesinden farkı, kullanıcı bu kontrolü seçtiği zaman, Windows’un otomatik bir şekilde, bu kontrolü seçili hale getirmesi ve bu kontrol ile aynı grupta bulunan diğer seçenek düğmelerini seçilmemiş hale getirmesidir. |
| BS_CHECKBOX |
Seçenek kutusu oluşturmak için kullanılır. Oluşturulan seçenek kutusuna ilişkin başlık yazısı, varsayılan durumda kontrolün sağ kısmında görüntülenir. Başlık yazısının konumu, BS_LEFTTEXT ve BS_RIGHTBUTTON sembolik sabitleri ile belirlenir. |
| BS_DEFPUSHBUTTON |
BS_PUSHBUTTON sembolik sabiti ile oluşturulan düğme kontrolüne benzer biçimde davranış gösteren bir kontrol oluşturmak için kullanılır. Bu kontrolden farklı olarak, etrafında siyah renkte bir çerçeve vardır. Eğer kontrol bir diyalog kutusu içerisinde bulunuyorsa, kullanıcı ENTER tuşuna bastığında bu kontrole basılmış gibi işlem yapılır. |
| BS_GROUPBOX |
Diğer kontrolleri bir grup halinde bir arada tutmak için kullanılan bir grup kutusu kontrolü oluşturmak için kullanılır. Pencere başlık yazısı, grup kutusunun sol üst köşesinde görüntülenir. |
| BS_LEFTTEXT |
BS_RIGHTBUTTON sembolik sabiti ile aynı anlama gelmektedir. Bu sabit, seçenek kutuları ve seçenek düğmeleri ile birlikte kullanılır. Bu kontrollere ilişkin pencere başlık yazılarının, kontrollerin sol tarafında görüntülenmesini sağlar. |
| BS_OWNERDRAW |
Kullanıcı - tanımlı bir kontrol oluşturmak için kullanılır. Kontrol yaratıldığında, üst pencereye WM_MEASUREITEM mesajı gönderilir, kontrolün görünümüne ilişkin bir değişiklik oluştuğunda ise üst pencereye WM_DRAWITEM mesajı gönderilir. |
| BS_PUSHBUTTON |
Standart basma düğmesi kontrolü oluşturmak için kullanılır. Kullanıcı kontrolü seçtiğinde üst pencereye WM_COMMAND mesajı gönderilir. |
| BS_RADIOBUTTON |
Standart seçenek düğmesi kontrolü oluşturmak için kullanılır. Oluşturulan seçenek düğmesine ilişkin başlık yazısı, varsayılan durumda kontrolün sağ kısmında görüntülenir. Başlık yazısının kontrolün sol kısmında görüntülenmesi için bu sembolik sabit, BS_LEFTTEXT veya BS_RIGHTBUTTON sembolik sabitleriyle birlikte kullanılmalıdır. |
| BS_BITMAP |
Düğme kontrolünün üzerinde bir bitmap görüntüleneceğini belirtir. |
| BS_BOTTOM |
Düğmeye ilişkin başlık yazısının, düğmenin sınırlarını belirten dikdörtgenin alt kısmına hizalanacağını belirtir. |
| BS_CENTER |
Düğmeye ilişkin başlık yazısının, düğmenin sınırlarını belirten dikdörtgenin ortasına hizalanacağını belirtir. (Yatay olarak ortalama) |
| BS_ICON |
Düğme kontrolünün üzerinde bir ikon görüntüleneceğini belirtir. |
| BS_LEFT |
Düğmeye ilişkin başlık yazısının, düğmenin sınırlarını belirten dikdörtgenin soluna hizalanacağını belirtir. Eğer düğme bir seçenek kutusu ya da bir senek düğmesi ise ve BS_RIGHTBUTTON özelliğine sahip değilse, yazı kontrolün sağ kısmının soluna hizalanır. |
| BS_MULTILINE |
Kontrole ilişkin başlık yazısı, kontrolün genişliğinden daha uzun ise, yazının bir alt satıra kaydırılmasını sağlar. |
| BS_NOTIFY |
Kontrolün üst penceresine, BN_DBLCLK, BN_KILLFOCUS ve BN_SETFOCUS mesajlarını gönderebilmesini sağlar. BN_CLICKED mesajı, kontrol bu biçim sahip olmasa bile gönderilir. |
| BS_PUSHLIKE |
Standart düğme kontrolüne benzer davranış gösteren bir kontrol oluşturmak için kullanılır. Düğme basılı halde değilken, tümsek bir şekilde görüntülenir, basılı halde iken çukur bir şekilde görüntülenir. |
| BS_RIGHT |
Düğmeye ilişkin başlık yazısının, düğmenin sınırlarını belirten dikdörtgenin sağına hizalanacağını belirtir. Eğer düğme bir seçenek kutusu ya da bir senek düğmesi ise ve BS_RIGHTBUTTON özelliğine sahip değilse, yazı kontrolün sağ kısmının sağına hizalanır. |
| BS_RIGHTBUTTON |
BS_LEFTTEXT sembolik sabiti ile aynı anlama gelmektedir. Bu sabit, seçenek kutuları ve seçenek düğmeleri ile birlikte kullanılır. Bu kontrollere ilişkin pencere başlık yazılarının, kontrollerin sol tarafında görüntülenmesini sağlar. |
| BS_TEXT |
Düğme kontrolüne ilişkin başlık yazısını belirtir. |
| BS_TOP |
Düğmeye ilişkin başlık yazısının, düğmenin sınırlarını belirten dikdörtgenin üst kısmına hizalanacağını belirtir. |
| BS_VCENTER |
Düğmeye ilişkin başlık yazısının, düğmenin sınırlarını belirten dikdörtgenin ortasına hizalanacağını belirtir. (Dikey olarak ortalama) |
Düğme Durumları (Button States)
Düğme kontrolleri seçili olup olmamalarına göre belli durumlara sahip olurlar. Uygulama içerisinde düğme kontrollerine ilişkin durum bilgileri kontrol edilerek durumlara özel tanımlanmış belli işlemler yapılabilir.
Düğmenin Seçilmesi : Uygulamanın çalışması sırasında kullanıcı, düğme kontrolünü üç biçimde seçebilir : Fare ile kontrol üzerine tıklayarak, klavyeden tab tuşunu kullanıp kontrole odaklanıp Enter tuşuna basarak ve bir grup içerisinde bulunan düğme kontrolüne Tab tuşu ile odaklanıp ok tuşlarını kullanarak. Bir düğme kontrolünün seçilmesi ile aşağıdaki olaylar tetiklenir :
1- Windows tarafından klavye odağı seçilen düğme kontrolüne verilir.
2- Düğme kontrolü ana penceresine seçildiğine ilişkin bir mesaj iletir.
3- Ana pencere veya Windows tarafından düğme kontrolüne, durumunu değiştirmesine ilişkin bir mesaj iletilir.
4- Ana pencere veya Windows düğme kontrolünü sahip olduğu yeni durumuna bağlı olarak yeniden çizer.
Düğme Durunu Elemanları : Bir düğme kontrolüne ilişkin durumlar üç parametreye bağlıdır : odaklanma durumu, basma durumu ve işaretlenme durumu. Odaklanma durumu, bir seçenek kutusuna, seçenek düğmesine, basma düğmesine veya kullanıcı-tanımlı bir düğmeye ilişkin olabilir. Düğme kontrolüne odaklanılması için, kontrolün kullanıcı tarafından seçilmesi gereklidir. Klavye odağının düğme kontrolünden alınması için ise, kullanıcının başka bir kontrolü seçmesi gereklidir. Uygulamanın çalışması sırasında, klavye odağı aynı anda sadece bir kontrol üzerinde bulunabilir.
Klavye odağı bir düğme kontrolüne verildiğinde, kontrol etrafına sistem tarafından noktalı bir çizgi çizilir ve odaklanma durumu belirtilir. Düğme kontrolüne odaklanıldığında ise, düğme kontrolü etrafına kalın bir çerçeve çizilir. Otomatik düğmeler için Windows çerçeveyi otomatik olarak çizer, otomatik olmayan düğmeler için ise düğme etrafına çerçeve çizilmesi için kontrole mesaj iletilmesi gereklidir .
Basma durumu, sadece basma düğmelerine, işaret kutularına ve 3-durumlu işaret kutularına ilişkindir. Düğme kontrolüne ilişkin basma durumu, ya basılı olmayı ya da basılı olmamayı ifade eder. Bir basma düğmesine basıldığı zaman, düğme ekran üzerinde biraz daha çukur görünecek şekilde yeniden çizilir. Basılı olmadığı zaman ise ekran üzerinde biraz daha tümsek görünecek şekilde yeniden çizilir. Seçenek kutusuna, seçenek düğmesine veya 3-durumlu işaret kutusuna basıldığı zaman, düğmenin arka planı griye boyanır. Bu kontroller basılı olmadığı zaman arka plandaki grilik kaldırılır.
İşaret durumu, bir seçenek kutusuna, seçenek düğmesine veya 3-durumlu işaret kutusuna ilişkindir. Düğme kontrolüne ilişkin işaret durumu, işaretli, işaretsiz veya belirsiz durumu ifade eder. Belirsiz durum sadece 3-durumlu seçenek kutularına ilişkindir. Bir seçenek kutusu işaretlendiği zaman seçili olma durumunu belirten bir işaret çizilir. Bir seçenek düğmesi işaretlendiği zaman, seçili olma durumunu belirten bir nokta çizilir. 3-durumlu bir seçenek kutusu işaretlendiği zaman, seçili olma durumunu belirten bir işaret çizilir. Otomatik düğmeler için işaret durumu Windows tarafından otomatik olarak ayarlanırken, otomatik olmayan düğmeler için kontrollere mesaj iletilmesi gereklidir.
Düğme Durumunun Değiştirilmesi : Kullanıcı bir düğme kontrolünü seçtiği zaman, düğmenin seçim elemanlarından bir veya birkaçının değiştirilmesi gereklidir. Windows sistemleri, tüm düğme türleri için odaklanma durumunu otomatik olarak ayarlar. Diğer durum değişiklikleri otomatik kontroller için Windows tarafından ayarlanır; ancak otomatik olmayan düğmeler için kontrollere mesaj gönderilerek ayarlanabilir. Düğme türleri için değiştirilmesi gereken durum elemanları şunlardır :
- İşaret kutusu için işaret durumunun değiştirilmesi
- Seçenek düğmesi için işaret durumunun değiştirilmesi. Eğer aynı gruba ilişkin birden fazla işaret düğmesi varsa onların işaret durumları da değiştirilmelidir.
- Kullanıcı-tanımlı düğme kontrollerinin sahip olabileceği durumlar, tanımlanmalarına bağlıdır. Grup kutuları için durum bilgisi kullanılmaz.
Uygulama, bir düğme kontrolünün durumunu, kontrole BM_GETCHECK veya BM_GETSTATE mesajı iletilerek öğrenilebilir. Düğme kontrolünün durumunun değiştirilmesi için ise, kontrole BM_SETCHECK veya BM_SETSTATE mesajları iletilmelidir.
Düğme Kontrolünün Gönderdiği Bilgi Mesajları
Kullanıcı bir düğme kontrolünü seçtiği zaman, kontrolün durumu değişir ve kontrol ana pencereye bilgi mesajı iletir. Örneğin kontrol seçildiği zaman ana pencereye BN_CLICKED mesajı iletir. Gönderilen mesajların wParam parametresinin düşük anlamlı WORD değeri kontrolün tanımlayıcı değerini belirtir; yüksek anlamlı WORD değeri ise bilgi kodunu belirtir. Mesajın lParam parametresi ise kontrole ilişkin pencere tutamaç değerini belirtir. Gönderilen bilgi mesajları ve ana pencereden mesajlara verilen yanıtlar kontrolün türüne ve o anki durum bilgisine bağlıdır. Düğme kontrolleri tarafından gönderilen bilgi mesajları şunlardır :
|
DÜĞME KONTROLÜNÜN GÖNDERDİĞİ MESAJ
|
ANLAMI
|
| BN_CLICKED |
Kullanıcı kontrole fare ile tıkladığı zaman gönderilir. |
| BN_DBLCLK |
Kullanıcı kontrole fare ile çift tıkladığı zaman gönderilir. |
| BN_DISABLE |
Kontrol pasif hale geldiği zaman gönderilir. |
| BN_PUSHED |
Kullanıcı kontrole bastığı zaman gönderilir. |
| BN_KILLFOCUS |
Klavye odağı kontrolden ayrıldığı zaman gönderilir. |
| BN_PAINT |
Kontrolün yeniden çizilmesi gerektiği zaman gönderilir. |
| BN_SETFOCUS |
Kontrol klavye odağını aldığı zaman gönderilir. |
| BN_UNPUSHED |
Kontrolün basılı olma durumu ortadan kalktığı zaman gönderilir. |
Düğme kontrolünün BN_DISABLE, BN_PUSHED, BN_KILLFOCUS, BN_PAINT, BN_SEFOCUS ve BN_UNPUSHED mesajlarını gönderebilmesi için kontrolün BS_NOTIFY pencere biçimine sahip olmalıdır. BN_CLICKED ve BN_DBLCLK mesajlarını ise her durumda gönderir.
Otomatik düğmeler için basılı olma, basılı olmama ve çizilme işlemleri sistem tarafından otomatik gerçekleştirildiği için, uygulama sadece BN_CLICKED ve BN_DBLCLK bilgi mesajlarını işler. Otomatik olmayan düğme kontrolleri için, kontrolün durumuna bağlı olarak kontrole mesajlar iletilir. Kullanıcı-tanımlı bir kontrol seçildiği zaman ise kontrol ana pencereye WM_DRAWITEM mesajı gönderir. Bu bilgi mesajı yeniden çizilecek kontrolün tanımlayıcı değerini ve durum bilgisini içerir.
Düğme Kontrolüne Gönderilen Mesajlar
Bir ana pencere, alt penceresi olarak bulunan bir düğme kontrolüne SendMessage fonksiyonu ile mesaj iletebilir; bir diyalog kutusu içerisinde bulunan düğme kontrolüne ise SendDlgItemMessage, CheckDlgButton, CheckRadioButton veya IsDlgButtonChecked fonksiyonları ile mesaj iletebilir.
Bir seçenek kutusunun veya seçenek düğmesinin seçim durumuna ilişkin bilgi almak için kontrole BM_GETCHECK mesajı iletilir. Kontrole BM_GETCHECK mesajı iletilmesi ile IsDlgButtonChecked fonksiyonun çağrılması eşdeğerdir. Düğme kontrolünün o anki durumuna ilişkin bilgi almak için ise kontrole BM_GETSTATE mesajı iletilir. Sadece belli bir duruma ilişkin bilgi alınacaksa genel durum bilgisi üzerinde bitsel işlemler yapılır.
Bir seçenek kutusunun veya seçenek düğmesinin seçili olma durumunu değiştirmek için kontrole BM_SETCHECK mesajı iletilir. Bu mesajın geri dönüş değeri sıfırdır. Kontrole BM_SETCHECK mesajı iletilmesi ile CheckDlgButton veya CheckRadioButton fonksiyonlarının çağrılması eşdeğerdir. Bir düğme kontrolünün basılı olma durumunu değiştirmek için kontrole BM_SETSTATE mesajı iletilir. Bu mesajın geri dönüş değeri de sıfırdır. Bir düğme kontrolünün biçimini değiştirmek için kontrole BM_SETSTYLE mesajı iletilir. BS_BITMAP veya BS_ICON pencere biçimleri kullanılarak oluşturulmuş bir düğme kontrolüne BM_SETIMAGE mesajı iletilerek görüntü atanabilir veya BM_GETIMAGE mesajı iletilerek o kontrole atanmış görüntüye ilişkin tutamaç değeri elde edilebilir.
Bir diyalog kutusunda yer alan basma düğmesi kontrolüne DM_GETDEFID mesajı iletilerek, kontrole ilişkin tanımlayıcı değer elde edilebilir. DM_SETDEFID mesajı iletilerek basma düğmesi kontrolü bir dialog kutusuna atanabilir.
|
DÜĞME KONTROLÜNE GÖNDERİLEN MESAJ
|
ANLAMI
|
| BM_CLICK |
Düğmeye WM_LBUTTONDOWN ve WM_LBUTTONUP mesajı iletir, ana pencereye ise BN_CLICKED mesajı iletir. wParam ve lParam parametreleri sıfır geçilmelidir. |
| BM_GETCHECK |
Düğmenin işaretlenmiş olup olmadığı bilgisini döndürür. wParam ve lParam parametreleri sıfır geçilmelidir. |
| BM_GETIMAGE |
Düğmeye atanmış bitmap veya ikonun tutamaç değerini döndürür. Eğer düğme ile ilişkilendirilmiş bitmap veya ikon yoksa NULL değer döndürür. wParam parametresi olarak görüntünün türünü belirten bir bayrak değer geçilir, lParam parametresi ise sıfır geçilir. |
| BM_GETSTATE |
Düğmenin o anki işaretlenme durum bilgisini, basılma durum bilgisini ve odaklanılma durum bilgisini döndürür. wParam ve lParam parametreleri sıfır geçilmelidir. |
| BM_SETCHECK |
Seçenek düğmeleri ve seçenek kutuları için işaretlenme durum bilgisini değiştirir. Bu mesaj seçenek düğmelerine iletilirken, wParam parametresi olarak sıfırdan büyük bir değer verilirse, düğmeye WS_TABSTOP özelliği atanır. lParam parametresi olarak sıfır geçilir. |
| BM_SETIMAGE |
Tutamaç değeri verilen bitmap veya ikonu bir düğme ile ilişkilendirir. Eğer düğme daha önce bir bitmap veya ikon ile ilişkilendirilmişse, ona ait tutamaç değeri döndürülür. wParam parametresi olarak görüntünün türünü belirten bir bayrak değer, lParam parametresi olarak görüntünün tutamaç değeri geçilir. |
| BM_SETSTATE |
Düğmenin basılma durum bilgisini değiştirir. Bu mesaj kullanıcı-tanımlı düğmelere gönderildiğinde ve eğer düğmenin durum bilgilerinde değişiklik olmuşsa, ana pencereye WM_DRAWITEM mesajı iletilir. wParam parametresi olarak düğmenin vurgulanıp vurgulanmayacağını belirten bir bayrak değer geçilir. lParam parametresi sıfır geçilir. |
| BM_SETSTYLE |
Düğmenin biçim bilgilerini değiştirir. Bu mesaj iletilirken, mesajın düşük anlamlı WORD değeri olarak TRUE değeri verilirse, düğme tekrar çizilir. wParam parametresi olarak yeni biçim bilgisi, lParam parametresi olarak düğmenin yeniden çizilip çizilmeyeceğini belirten bir bayrak değer geçilir. |
| WM_CHAR |
Seçenek kutularına veya otomatik seçenek kutularına gönderilir. Kullanıcı (+) veya (=) tuşlarına bastığı zaman seçenek kutusunun işaretlenmesini, (-) tuşuna bastığı zaman ise işaretli bir seçenek kutusunun işaretinin kaldırılmasını sağlar. |
| WM_ENABLE |
Düğmenin boyanmasını sağlar. |
| WM_ERASEBKGND |
Kullanıcı-tanımlı düğmelere iletilir, düğmenin arka planının silinmesini sağlar. Diğer türdeki düğmelerde bu işlemi gerçekleştirmek için WM_PAINT veya WM_ENABLE mesajları kullanılmalıdır. |
| WM_GETDLGCODE |
Varsayılan düğme prosedürünün üzerinde işlem yaptığı düğme kontrolünün türünü belirten bir değer döndürür. Bu değerler; BS_AUTOCHECKBOX türündeki düğme için DLGC_WANTCHARS | DLGC_BUTTON, BS_AUTORADIOBUTTON türündeki düğme için DLGC_RADIOBUTTON, BS_CHECKBOX türündeki düğme için DLGC_WANTCHARS | DLGC_BUTTON, BS_DEFPUSHBUTTON türündeki düğme için DLGC_DEFPUSHBUTTON, BS_GROUPBOX türündeki düğme için DLGC_STATIC, BS_PUSHBUTTON türündeki düğme için DLGC_UNDEFPUSHBUTTON, BS_RADIOBUTTON türündeki düğme için DLGC_RADIOBUTTON değeridir. |
| WM_GETFONT |
Düğme kontrolünün başlık yazısı için kullanılan yazının font bilgisini döndürür. |
| WM_KEYDOWN |
Kullanıcı klavyeden boşluk tuşuna bastığı zaman düğmeye basılmış gibi işlem yapılmasını sağlar. |
| WM_KEYUP |
Klavyeden TAB tuşu hariç diğer tuşlara basıldığında fare odağının kaldırılmasını sağlar. |
| WM_KILLFOCUS |
Düğmenin etrafındaki dikdörtgensel bölgeyi kaldırır. |
| WM_LBUTONDBLCLICK |
Seçenek düğmeleri ve kullanıcı-tanımlı düğmeler için, ana pencereye BN_DBLCLK mesajı iletilmesini sağlar. Diğer türdeki düğmeler için bu mesaj, WM_LBUTTONDOWN mesajı ile eşdeğerdir. |
| WM_LBUTTONDOWN |
Fare imleci, düğmenin sınırları içerisinde getirildiğinde düğme kontrolünün vurgulanmasını sağlar. |
| WM_LBUTTONUP |
Eğer fare, düğme üzerine odaklanmışsa bu mesajın gönderilmesi fare odaklanmasını ortadan kaldırır. |
| WM_MOUSEMOVE |
Eğer fare, düğme üzerine odaklanmışsa, bu mesajın gönderilmesi WM_LBUTTONDOWN mesajının gönderilmesiyle eşdeğerdir. |
| WM_NCCREATE |
BS_OWNERDRAW türünde oluşturulmuş bir düğmenin BS_PUSHBUTTON türüne dönüştürülmesini sağlar. |
| WM_NCHITTEST |
Eğer düğme kontrolü bir grup kutusu ise HTTRANSPARENT değerini döndürür. |
| WM_PAINT |
Düğmenin o anki biçim bilgilerine ve durum bilgilerine göre yeniden çizilmesini sağlar. |
| WM_SETFOCUS |
Düğme kontrolünün etrafına dikdörtgen çizer ve kontrole odaklanıldığını belirtir. |
| WM_SETFONT |
Kontrole yeni bir font değeri atar ve aldığı parametreye göre kontrolü yeniden çizer. |
| WM_SETTEXT |
Düğme kontrolünün başlık yazısını değiştirir. |
Düğme Kontrolüne İlişkin Renk Mesajları
Windows sistemleri düğme kontrollerini varsayılan renklerle oluşturur. Düğme kontrolü henüz çizilmeden önce kontrolün ana penceresine sistem tarafından WM_CTLCOLORBTN mesajı iletilir. Bu mesaj, düğme kontrolünün Device Context (DC) tutamaç değerini ve alt pencerenin tutamaç değerini içerir. Bu tutamaç değerleri ana pencere tarafından kontrolün yazısını ve arka plan renklerini değiştirmek için kullanılır. Varsayılan düğme renk değerleri şunlardır :
- COLOR_BTNFACE : Düğme kontrolünün yüzeyi
- COLOR_BTNHIGHLIGHT :Düğme kontrolünün vurgulama alanları (Üst ve sol kenarlar)
- COLOR_BTNSHADOW : Düğme kontrolünün gölgesi
- COLOR_BTNTEXT : Düğme kontrolünün başlık yazısı
- COLOR_GRAYTEXT : Düğme kontrolünün gri renkli başlık yazısı
- COLOR_WINDOW : Pencere arka planı
- COLOR_WINDOWFRAME : Pencere çerçevesi
- COLOR_WINDOWTEXT : Penceredeki başlık yazıları
Bu renklere ilişkin varsayılan değerleri almak amacıyla GetSysColor fonksiyonu çağrılır, bu değerleri değiştirmek için de SetSysColor fonksiyonu çağrılır.
Bu yazımızda düğme kontrolünü tanımladık, düğme kontrolü çeşitlerini inceledik, kontrole gönderilen mesajların ve kontrolden gelen mesajların anlamlarını inceledik. Bir sonraki yazımızda düğme kontrollerinin kullanımını içeren örnek bir uygulama yapacağız. Uygulama yazımızda görüşmek üzere, herkese mutlu günler dilerim...
Kaynak : csharpnedir.com
|
 |