Bu site emekli olmuştur. Arşiv amaçlı olarak BT AKADEMİ sponsorluğunda yayın hayatına devam etmektedir.




C#nedir?com
 
YAZAR HAKKINDA
Çiğdem Çavdaroğlu
Çiğdem Çavdaroğlu
http://www.csharpnedir.com/
İletişme geçmek için tıklayın.
28 Makalesi yayınlanmakta.
Yazar hakkında detaylı bilgi için tıklayın.
Yayınlanan diğer makaleleri için tıklayın.
İlgili etiketler: baslik belirten durumu iliskin isaret kontrol kontrole kullanici kullanilir. kutusu mesaji otomatik parametresi pencere windows C / Sys Prog. Çiğdem Çavdaroğlu
 
YAZI HAKKINDA
Türü : Makale
Serbest Köşede C#nedir?com üyelerinin hazırladıkları yazılar yayınlanır. Bu yazılar editör incelemesine girmeden yayınlanır.
Seviyesi : İleri
Kategori : C / Sys Prog.
Yayınlanma Tarihi : 23.3.2006
Okunma Sayısı : 29259
Yorum Sayısı : 0     yorum yaz
Site İçi AramaSİTE İÇİ ARAMA
Üye Girişini AçÜye GİRİŞİ
Üye girişi için tıklayın.
Kullanıcı Adı
Şifre
 
Beni her zaman hatırla
Bir hafta boyunca kullanıcı bilgilerinizi kullanıcı çıkışı yapana kadar hatırlar. (Paylaşılan bilgisayarlarda önerilmez.)
 
Şifremi / Kullanıcı Adımı unuttum.
 
.net TV RSS Serbest KÖŞE (?)
Serbest Köşede C#nedir?com üyelerinin hazırladıkları yazılar yayınlanır. Bu yazılar editör incelemesine girmeden yayınlanır.
emre TAŞ
Silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
Makale Gönder Bende Yazmak İstiyorum
.net TV RSSBlogroll
Turhal Temizer
Conda install environment.yml Package 26.12.2024
Turhal Temizer
Mac OS/X Removing CUDA 26.12.2024
Burak Selim Şenyurt
Rust ile ECS Yaklaşımını Anlamak 26.12.2024
Burak Selim Şenyurt
Birlikte Rust Öğrenelim Serisi 26.12.2024
  Diğer Herşey
Sponsorlar
BT Akademi
Medya Portakal
Video Hosting Sponsoru
Csharpnedir.com bir Ineta üyesidir
Uzman Abi
Her Yönüyle C# - Sefer Algan
Windows API - Düğme Kontrolleri
 
Kapat
Sayfayı Yazdır Sık Kullanılanlara Ekle Arkadaşıma Gönder MySpace Del.Ico.Us Digg Facebook Google Mixx Reddit StumbleUpon
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
  • Yazılan Yorumlar
  • Yorum Yaz
Bu konu hakkında yayınlanan yorum bulunmamaktadır.
"Yorum Yaz" tabını kullanarak sizde yorumlarınızı yazabilirsiniz.
Yorum yazabilmek için üye girişi yapmalısınız. Üye girişi için tıklayın.
Üye değilseniz Üyel Ol linkine tıklayarak üyeliğinizi hemen başlatabilirisniz.
 
  • Bu Konuda Son 10
  • Eklenen Son 10
  • Bu Konuda Geçmiş 10
Bu Konuda Yazılmış Yazılmış 10 Makale Yükleniyor
Son Eklenen 10 Makale Yükleniyor
Bu Konuda Yazılmış Geçmiş Makaleler Yükleniyor