SİTE 
            İÇİ ARAMA | 
       
      
        | 
            
         | 
       
     
                    
                                     	
        
        
        
        
                    
    
                    
    
      
         Blogroll | 
       
      
        | 
              
         | 
       
     
                    
    
                    
                    
                     
                 | 
                
                    
    
        
            | 
                
             | 
         
        
            
                
                    
                        | 
                            Windows API - Düğme Kontrolleri | 
                        
                             | 
                                
                     
                    
                        
                            
	
    
		
            | Gönderiliyor lütfen bekleyin... |   
        
	 
    
 
                         | 
                     
                 
             | 
         
        
            
                
                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 
             | 
         
        
            | 
             | 
         
        
            | 
                 
             | 
         
        
            
                
                
                    
                        - 
                            
                        
 
                        - 
                            
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
                         
                     
                 
                
                
             | 
         
        
            | 
                
             | 
         
     
                 |