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...
KAYNAKLAR
- Win32 Programlama
Yardım Sayfaları
Makale:
Windows API - Düğme Kontrolleri C ve Sistem Programlama Çiğdem Çavdaroğlu
|