| Bu yazımızda, ’Edit 
  Box’, ’Text Box’ isimleriyle bilinen yazı kutusu 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 sistemleri, kullanıcı ile uygulama 
  programlarının haberleşmesini sağlayabilmek için birtakım kontroller sunmuştur. 
  Kontroller ile ilgili genel bilgileri önceki yazılarımızda ele almıştık. Bu 
  kontrollerden birisi olan yazı kutusu kontrolü, Windows uygulamalarında kullanıcının 
  klavyeden bilgi girmesini sağlamak veya kullanıcıya birtakım bilgileri sunmak 
  amaçlarıyla kullanılır. Kontrolün görünümü şu şekildedir : 
 
  
 Yazı 
  Kutusu Kontrolünün Oluşturulması
 
 Öncelikle kontrolün 
  nasıl oluşturulduğunu ele alalım. Önceki yazılarımızdan hatırlayacağınız üzere, 
  standart Windows kontrolleri CreateWindow ya da CreateWindowEx fonksiyonları 
  ile bu fonksiyonların pencere sınıfı parametreleri olarak özel pencere sınıfı 
  isimleri geçilerek oluşturuluyordu. Standart kontrollere ilişkin pencere sınıfları, 
  sistem tarafından otomatik olarak oluşturularak sisteme kaydedilir. Bu pencere 
  sınıflarına ilişkin isimler, standart başlık dosyalarında belirtilmiştir. Biz 
  de bu isimleri kullanarak istediğimiz kontrolü CreateWindow fonksiyonlarını 
  çağırarak oluştururuz. Yazı kutusu kontrolüne ilişkin pencere sınıfı ismi ’edit’ 
  tır. Yazı kutusu kontrolü oluşturmak için CreateWindow fonksiyonunu çağırdığımızda, 
  fonksiyonun ilk parametresi olan pencere sınıf ismi yerine ’edit’ pencere sınıfı 
  ismi geçilir. Fonksiyonun ikinci parametre değişkeni, pencere oluştururken, 
  oluşturulan pencerenin başlık yazısında görüntülenecek yazıyı temsil ediyordu. 
  Yazı kutusu kontrolü oluştururken ise bu parametre değişkeninin değeri, yazı 
  kutusunun içindeki yazıyı temsil eder. Fonksiyonun üçüncü parametresi, oluşturulan 
  pencerenin biçim bilgilerini belirtiyordu. Standart Windows kontrolleri için 
  birtakım biçimler tanımlanmış ve bu biçimlere ilişkin isimler, sembolik sabitler 
  olarak başlık dosyalarına eklenmiştir. Standart kontrollerin pencere biçim bilgisine 
  ilişkin sembolik sabit isimlerinin ilk iki harfleri standart kontrolü temsil 
  edecek şekilde verilmiştir. Örneğin yazı kutusu kontrolüne ilişkin pencere biçimi 
  sembolik sabitleri ES_ öneki ile başlar.
 
 Yazı 
  Kutusu Kontrolüne İlişkin Pencere Biçimleri
 
 
 
  Yazı kutusu kontrolü 
  varsayılan olarak çerçevesizdir. Çerçeveli halde oluşturulması istenirse WS_BORDER 
  pencere biçimi ile oluşturulmalıdır. 
    | YAZI 
        KUTUSU KONTROLÜ PENCERE BİÇİMİ SEMBOLİK SABİT İSMİ | ANLAMI |   
    | ES_MULTILINE | Yazı kutusu kontrolünün satır sayısı için iki biçim mevcuttur. Varsayılan 
      biçim tek satırlı yazı kutusudur. Eğer kontrolün birden fazla sayıda satıra 
      sahip olması istenirse ES_MULTILINE pencere biçimi sembolik sabiti kullanılmalıdır. |   
    | ES_LEFT, 
      ES_CENTER, ES_RIGHT | Windows’un 
      yazı kutusundaki yazıyı hizalaması için üç seçenek sunulmuştur. Kontroldeki 
      yazı sağa, sola ya da ortaya hizalanabilir. ES_LEFT yazının sola hizalanmasını, 
      ES_CENTER yazının ortaya hizalanmasını, ES_RIGHT ise yazının sağa hizalanmasını 
      sağlar. Ancak bu pencere biçimlerinin kullanılabilmesi için kontrol ES_MULTILINE 
      pencere biçimi ile oluşturulmalıdır. |   
    | ES_LOWERCASE, 
      ES_UPPERCASE, ES_OEMCONVERT | Kullanıcının 
      yazı kutusu kontrolüne gireceği yazının görünümü uygulama tarafından kontrol 
      edilebilir. Eğer kontrol ES_LOWERCASE pencere biçimi ile yaratılırsa kontroldeki 
      yazı küçük harflerle, ES_UPPERCASE pencere biçimi ile yaratılırsa kontroldeki 
      yazı büyük harflerle gösterilir. Bazı uygulamalarda kontroldeki yazının 
      belli bir karakter setine dönüştürülerek gösterilmesi gerekli olur. Bu durumda 
      kontrol ES_OEMCONVERT pencere biçimi ile oluşturulur. |   
    | ES_AUTOHSCROLL, 
      ES_AUTOVSCROLL | Kontrolün 
      içerisindeki yazının kaydırılması için iki seçenek sunulmuştur. Kontrol, 
      ES_AUTOHSCROLL biçimi ile yaratılırsa kontroldeki yazı yatay olarak kaydırılır. 
      ES_AUTOVSCROLL biçimi ile yaratılırsa dikey olarak kaydırılır. |   
    | ES_NUMBER | Yazı 
      kutusu kontrolüne sadece nümerik değerler girilmesini sağlar. |   
    | ES_NOHIDESEL | Klavye 
      odağı, yazı kutusu kontrolünden ayrıldıktan sonra, seçili olan yazının gizlenmemesini 
      sağlar. |   
    | ES_READONLY | Yazı 
      kutusu kontrolünün sadece okunur olarak yaratılmasını, dolayısıyla gösterilen 
      yazının kullanıcı tarafından değiştirilememesini sağlar. |   
    | ES_PASSWORD | Kontrole 
      yazılan yazının asterisks (*) karakterleri ile görüntülenmesini sağlar. 
      Şifre bilgisinin alınması gereken alanlarda kullanılabilir. Eğer yazının 
      asterisks karakterinden başka bir karakterle görüntülenmesi istenirse EM_SETPASSWORDCHAR 
      mesajı kullanılabilir. |   
    | ES_WANTRETURN | Kullanıcı 
      Enter tuşuna bastığı zaman kontrolde alt satıra geçilmesini sağlar. |  
 Standart kontroller 
  alt pencereler olarak yaratıldığı için WS_CHILD pencere biçimini içermek zorundadırlar. 
  Genel pencere biçimlerinden WS_VISIBLE biçimi de yazı kutusu kontrolü için kullanılabilir. 
  BU biçim oluşturulacak pencerenin görünür olup olmamasını belirler.
 
 Bir uygulama içerisinde 
  bu yazı kutusu pencere biçimlerine sahip kontroller oluşturmaya başlayalım. 
  Öncelikle, uygulamamızın başlangıç fonksiyonu olan WinMain fonksiyonunda, siyah 
  arka plan rengine sahip bir pencere oluşturalım. Yazı kutusu kontrollerimizin 
  ana penceresi bu pencere olacaktır. Kontrollerimizi oluşturmak üzere CreateWindow 
  fonksiyonunu çağırırken, fonksiyonun hWndParent isimli sekizinci parametre değişkeni 
  yerine, bu pencerenin tutamaç değerini geçeceğiz.
 
 Ana penceremiz 
  üzerinde, toplam yedi tane farklı özelliklere sahip yazı kutusu kontrolü oluşturacağız. 
  Bu kontrollerden hemen önce, statik kontroller oluşturup başlık yazısı olarak 
  kontrolün adını vereceğiz. Kontrollerimizin sahip olacakları özellikler şöyle 
  olacak :
 
 
 
  - 1. Kontrol 
    => İçerisindeki yazıyı sola hizalayan tek satırlı bir yazı kutusu kontrolü 
    Yazı kutusu kontrollerinin 
  genişlik değerlerini 200 olarak belirliyoruz. Yedinci yazı kutusu kontrolü hariç, 
  diğerlerinin yükseklik değerlerini 20 olarak, yedinci kontrolün yükseklik değerini 
  ise 60 olarak belirliyoruz. Statik kontrollerin ve yazı kutusu kontrollerinin 
  ana pencere üzerindeki konumlarını ise birbirleri üzerine gelmeyecek şekilde 
  ayarlıyoruz. Kontrollerin hepsi, uygulamanın pencere fonksiyonunda WM_CREATE 
  mesajı alındığı zaman, yani ana penceremiz oluştuğu zaman yaratılıyor. Kontrollerin 
  tanımlayıcı değerlerini, sembolik sabitler olarak kaynak kod dosyamızın başında 
  belirtiyoruz. Şimdi sırayla kontrollerimizi oluşturalım :- 2. Kontrol => İçerisindeki yazıyı sağa hizalayan ve büyük harflerle gösteren 
    bir yazı kutusu kontrolü
 - 3. Kontrol => İçerisindeki yazıyı ortaya hizalayan ve girilen yazının 
    uzunluğu, kontrol genişliğini aştığında dikey olarak kaydırma yapan bir                      yazı 
    kutusu kontrolü
 - 4. Kontrol => Sadece sayısal değerler girilmesine izin veren bir yazı 
    kutusu kontrolü
 - 5. Kontrol => Sadece okunur özellikte olan, değişikliğe izin vermeyen 
    bir yazı kutusu kontrolü
 - 6. Kontrol => Şifreli bilgiler girmek üzere, girilen bilgileri belirtilen 
    karakterle gösteren bir yazı kutusu kontrolü
 - 7. Kontrol => Kullanıcı ’Enter’ tuşuna bastığında alt satıra geçmeye 
    izin veren çok satırlı bir yazı kutusu kontrolü
 
 
 
 
 
  Yazı kutusu kontrollerini 
  oluştururken; öncelikle tüm kontroller için WS_CHILD, WS_VISIBLE pencere biçimleri 
  kullanıldı. Kontroller, birer alt pencere olarak oluşturulduğu için WS_CHILD 
  pencere biçiminin belirtilmesi gerektiğini daha önceden söylemiştik. Daha sonra 
  istenen özelliklere sahip olmaları için sırasıyla birinci kontrole yazıyı sola 
  hizalayan ES_LEFT pencere biçimi, ikinci kontrole yazıyı sağa hizalayan ES_RIGHT 
  ve yazıyı büyük harflerle gösteren ES_UPPERCASE pencere biçimleri, üçüncü kontrole 
  yazıyı sağa hizalayan ES_CENTER ve dikey kaydırma yapmayı sağlayan ES_AUTOVSCROLL 
  pencere biçimleri, dördüncü kontrole sadece sayısal değerler girilmesini sağlayan 
  ES_NUMBER pencere biçimi, beşinci kontrole sadece okunurluk özelliği sağlayan 
  ES_READONLY pencere biçimi, altıncı kontrole girilen yazıyı şifreleme karakterleri 
  ile gösteren ES_PASSWORD pencere biçimi, yedinci kontrole çok satırlılık özelliği 
  sağlayan ES_MULTILINE ve kullanıcı ’Enter’ tuşuna bastığında alt satıra geçmeyi 
  sağlayan ES_WANTRETURN pencere biçimleri eklendi.Şimdi uygulamamızı çalıştırarak, 
  kontrollerin ana pencere üzerindeki görünümlerine bakabilir ve kontrollerin 
  verilen özellikleri sağlayıp sağlamadığını test edebiliriz. Uygulamanın çalışan 
  hali şöyledir : 
    | #define ID_EDITBOX_1 
        101 #define ID_EDITBOX_2 102
 #define ID_EDITBOX_3 103
 #define ID_EDITBOX_4 104
 #define ID_EDITBOX_5 105
 #define ID_EDITBOX_6 106
 #define ID_EDITBOX_7 107
 //...
 
 LRESULT CALLBACK 
        WndProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam)
 {
     static HWND hEditBox1, hEditBox2, hEditBox3, hEditBox4, 
        hEditBox5, hEditBox6, hEditBox7;
     static HWND hStatic;
 
     
        switch(message) {
         case WM_CREATE :
             hStatic = CreateWindow("static","1. 
        Kontrol :",
                     
            WS_CHILD | WS_VISIBLE,
                     
            10,50,75,20,hWnd,(HMENU)200,
                     
            ((LPCREATESTRUCT)lParam)->hInstance,NULL);
 
     
                hEditBox1 = CreateWindow("edit","deneme",
                     
            WS_CHILD | WS_VISIBLE | ES_LEFT,
                     
            100,50,200,20,hWnd,(HMENU)ID_EDITBOX_1,
                     
            ((LPCREATESTRUCT)lParam)->hInstance,NULL);
 
     
                //////////////////////////////////////////////////////////////////
 
     
                hStatic = CreateWindow("static","2. 
        Kontrol :",
                     
            WS_CHILD | WS_VISIBLE,
                     
            10,90,75,20,hWnd,(HMENU)201,
                     
            ((LPCREATESTRUCT)lParam)->hInstance,NULL);
 
     
                hEditBox2 = CreateWindow("edit","deneme",
                     
            WS_CHILD | WS_VISIBLE | ES_RIGHT | ES_UPPERCASE,
                     
            100,90,200,20,hWnd,(HMENU)ID_EDITBOX_2,
                     
            ((LPCREATESTRUCT)lParam)->hInstance,NULL);
 
     
                //////////////////////////////////////////////////////////////////
 
     
                hStatic = CreateWindow("static","3. 
        Kontrol :",
                     
            WS_CHILD | WS_VISIBLE,
                     
            10,130,75,20,hWnd,(HMENU)202,
                     
            ((LPCREATESTRUCT)lParam)->hInstance,NULL);
 
     
                hEditBox3 = CreateWindow("edit","deneme",
                     
            WS_CHILD | WS_VISIBLE | ES_MULTILINE | ES_CENTER | ES_AUTOVSCROLL,
                     
            100,130,200,20,hWnd,(HMENU)ID_EDITBOX_3,
                     
            ((LPCREATESTRUCT)lParam)->hInstance,NULL);
 
     
                //////////////////////////////////////////////////////////////////
 
     
                hStatic = CreateWindow("static","4. 
        Kontrol :",
                     
            WS_CHILD | WS_VISIBLE,
                     
            10,170,75,20,hWnd,(HMENU)203,
                     
            ((LPCREATESTRUCT)lParam)->hInstance,NULL);
 
     
                hEditBox4 = CreateWindow("edit","deneme",
                     
            WS_CHILD | WS_VISIBLE | ES_NUMBER,
                     
            100,170,200,20,hWnd,(HMENU)ID_EDITBOX_4,
                     
            ((LPCREATESTRUCT)lParam)->hInstance,NULL);
 
     
                //////////////////////////////////////////////////////////////////
 
     
                hStatic = CreateWindow("static","5. 
        Kontrol :",
                     
            WS_CHILD | WS_VISIBLE,
                     
            350,50,75,20,hWnd,(HMENU)204,
                     
            ((LPCREATESTRUCT)lParam)->hInstance,NULL);
 
     
                hEditBox5 = CreateWindow("edit","deneme",
                     
            WS_CHILD | WS_VISIBLE | ES_READONLY,
                     
            440,50,200,20,hWnd,(HMENU)ID_EDITBOX_5,
                     
            ((LPCREATESTRUCT)lParam)->hInstance,NULL);
 
     
                //////////////////////////////////////////////////////////////////
 
     
                hStatic = CreateWindow("static","6. 
        Kontrol :",
                     
            WS_CHILD | WS_VISIBLE,
                     
            350,90,75,20,hWnd,(HMENU)205,
                     
            ((LPCREATESTRUCT)lParam)->hInstance,NULL);
 
     
                hEditBox6 = CreateWindow("edit","deneme",
                     
            WS_CHILD | WS_VISIBLE | ES_PASSWORD,
                     
            440,90,200,20,hWnd,(HMENU)ID_EDITBOX_6,
                     
            ((LPCREATESTRUCT)lParam)->hInstance,NULL);
 
     
                //////////////////////////////////////////////////////////////////
 
     
                hStatic = CreateWindow("static","7. 
        Kontrol :",
                     
            WS_CHILD | WS_VISIBLE,
                     
            350,130,75,20,hWnd,(HMENU)205,
                     
            ((LPCREATESTRUCT)lParam)->hInstance,NULL);
 
     
                hEditBox7 = CreateWindow("edit","deneme",
                     
            WS_CHILD | WS_VISIBLE | ES_MULTILINE | ES_WANTRETURN,
                     
            440,130,200,60,hWnd,(HMENU)ID_EDITBOX_7,
                     
            ((LPCREATESTRUCT)lParam)->hInstance,NULL);
 
     
            break;
     
            //...
     
        }
 
 
 |  
 
  
 Yazı 
  Kutusu Kontrolü İçerisindeki Yazının Alınması ve Değiştirilmesi
 
 Yazı kutusu kontrolü 
  içerisine kullanıcı tarafından yazılan bir yazı uygulama tarafından alınabilir 
  ve buradaki yazı değiştirilebilir. Uygulama, yazı kutusu kontrolüne yazılacak 
  yazının uzunluğunu da belli bir değer ile sınırlandırabilir. (Örneğin kişisel 
  bilgileri alan bir uygulamada isim bilgisinin 10 karakter ile sınırlandırılması 
  gibi)
 
 Kontroldeki yazının 
  alınması için, kontrole WM_GETTEXT mesajı gönderilir. Kontroldeki yazının değiştirilmesi 
  için kontrole WM_SETTEXT mesajı gönderilir.
 
 Şimdi uygulamamıza, 
  oluşturduğumuz yazı kutularının yazılarını değiştirmek üzere eklemeler yapalım. 
  Öncelikle kontrollerin yeni içeriklerini (char *) türünden bir dizi içerisinde 
  tutalım. Çalışma anında pencere üzerinde, farenin sol tuşuna tıklandığında sırasıyla 
  kontrollerimizin içeriklerini değiştirelim. Öncelikle kaynak kod dosyamızın 
  başına, kaçıncı tıklanma olduğu bilgisini sayacak olan static özelliğe sahip, 
  tamsayı türünden bir değişken tanımlayalım. Dizimizi oluşturalım. Pencere fonksiyonunda 
  WM_LBUTTONDOWN mesajı alınması durumunda ise, kontrollerin içeriklerini değiştirecek 
  kodu yazalım :
 
 
 
  Farenin sol tuşuna 
  her basıldığında, ’counter’ isimli değişkenin değerini bir artırıyoruz. Tüm 
  yazı kutusu kontrollerinin içerikleri değiştirildikten sonra bu kodun çalışmaması 
  için, ’counter’ isimli değişkenin değerini -1 olarak atıyoruz ve case ifadesinin 
  başında değişkenin değeri -1’e eşit ise ’return’ ifadesiyle geri dönüyoruz. 
  ’counter’ değişkeninin değeri aynı zamanda, içeriği değiştirilecek yazı kutusu 
  kontrolünün yeni içeriğinin ’newControlStrings’ dizisindeki sıra numarasına 
  karşılık geliyor. Kontrolün içeriğini değiştirmek için SetWindowText isimli 
  API fonksiyonuna ikinci parametre olarak bu dizinin ’counter’ değerindeki sıra 
  numarasındaki karakter katarını geçiyoruz. SetWindowText isimli API fonksiyonunun 
  ilk parametre değişkeni, başlığı değiştirilecek pencerenin tutamaç değeri olarak 
  girilir. Yazı kutusu kontrollerinin tutamaç değerlerini global alanda bir dizide 
  tutarsak, ilk parametre değişkenine geçilecek değere de kolayca erişebiliriz. 
  Bu amaçla global alanda ’editControls’ isimli, HWND türünden elemanlara sahip 
  yedi elemanlı bir dizi tanımladık. Yazı kutusu kontrollerini oluştururken, ’CreateWindow’ 
  fonksiyonundan elde ettiğimiz tutamaç değerlerini bu dizinin elemanları olarak 
  atarsak, yine ’counter’ global değişkenini, elemanların sıra numarası olarak 
  kullanabilir ve kontrollerin tutamaç değerlerine erişebiliriz. Uygulamayı tekrar 
  çalıştırarak, farenin sol tuşuna basarsak sırayla kontrollerdeki yazıların değiştirildiğini 
  ve kontrollerin özellerine bağlı olarak biçimlendirildiğini göreceğiz. Farenin 
  sol tuşuna yedi kez tıkladıktan sonra uygulamamız şu görünüme sahip olacaktır 
  : 
    | static int 
      counter = 0; HWND editControls[7];
 char *newControlStrings[7] = {"1. kontrol değiştirildi",
                                           
      "2. kontrol değiştirildi",
                                           
      "3. kontrol değiştirildi",
                                           
      "123456789",
                                           
      "5. kontrol değiştirildi",
                                           
      "6. kontrol değiştirildi",
                                           
      "7. kontrol değiştirildi 7. kontrol değiştirildi 7. kontrol değiştirildi"};
 //...
 
 LRESULT CALLBACK WndProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam)
 {
    //...
    switch 
      (message) {
       case 
      WM_CREATE :
          //Statik 
      kontrollerin ve yazı kutusu kontrollerinin oluşturulduğu kısım.
          //...
          break;
 
       case 
      WM_LBUTTONDOWN :
          if 
      (counter == -1)
              return;
          SetWindowText(editControls[counter],newControlStrings[counter]);
          counter++;
          if 
      (counter == 7)
              counter 
      = -1;
          break;
    }
 }
 |  
 
  
 Yazı 
  Kutusu Kontrolüne İlişkin Mesajlar
 
 
 
  Şimdi uygulamamızda, 
  bu mesajların bir kısmını kullanalım. Yine bir sayaç tutarak, farenin sağ tuşuna 
  her tıklandığında sıradaki kontrole erişerek, bu kontrole bir mesaj gönderelim. 
  Bu amaçla global alanda ’rightCounter’ isimli bir değişken tanımlıyoruz. Bu 
  değişkenin değerini, farenin sağ tuşuna her tıklandığında bir artırarak, kontrollerin 
  tutamaç değerlerini tuttuğumuz dizide bu değişkeni sıra numarası olarak kullanalım. 
  Kodumuza şu eklemeleri yapıyoruz : 
    | YAZI 
        KUTUSU KONTROLÜNE GÖNDERİLEN MESAJ | ANLAMI |   
    | EM_CANUNDO | Yazı kutusu kontrolünün geri alma özelliğine sahip olup olmadığını öğrenmek 
      amacıyla uygulama tarafından kontrole gönderilir. Kontrolün geri alma özelliğinin 
      var olup olmamasına göre, EM_UNDO mesajına cevap verip vermeyeceği bilgisi 
      öğrenilir. wParam ve lParam parametreleri kullanılmaz, sıfır olarak geçilmelidir. 
      Eğer kontrol geri alma özelliğine sahip ise TRUE, aksi takdirde FALSE değeri 
      geri döner. |   
    | EM_CHARFROMPOS | Yazı 
      kutusu kontrolündeki belli bir noktaya en yakın konumda olan karakterin, 
      sıra numarasını ve satır sıra numarasını öğrenmek amacıyla uygulama tarafından 
      kontrole gönderilir. wParam parametresi kullanılmaz, sıfır olarak geçilir. 
      lParam parametresinin düşük anlamlı WORD değeri yazı kutusu alanında bir 
      noktanın x koordinat değerini, yüksek anlamlı WORD değeri ise y koordinat 
      değerini belirtir. x ve y koordinat değerleri, MAKELPARAM makrosuna parametre 
      olarak geçilerek lParam parametresine geçilecek değer elde edilir. Mesajın 
      geri dönüş değeri, düşük anlamlı WORD değerinin karakter sıra numarası, 
      yüksek anlamlı WORD değerinin satır sıra numarasıdır. Tek satırlı yazı kutusu 
      kontrolü için satır sıra numarası her zaman sıfır olarak döndürülür. Eğer 
      verilen nokta koordinatı, yazı kutusu kontrolündeki son karaktere karşılık 
      geliyorsa, bu durumda kontroldeki son karakter geri döndürülür. Eğer nokta 
      koordinatları kontrolün dışında kalıyorsa, -1 değeri geri döndürülür. |   
    | EM_EMPTYUNDOBUFFER | Yazı 
      kutusu kontrolünün geri alma bayrağını sıfırlamak için uygulama tarafından 
      kontrole gönderilir. wParam ve lParam parametreleri kullanılmaz, sıfır olarak 
      geçilir. Geri dönüş değeri yoktur. Yazı kutusu kontrolü WM_SETTEXT veya 
      EM_SETHANDLE mesajları aldığı zaman geri alma bayrağı otomatik olarak sıfırlanır. |   
    | EM_GETFIRSTVISIBLELINE | Yazı 
      kutusu kontrolündeki görünen en üst satırı almak için uygulama tarafından 
      kontrole gönderilir. wParam ve lParam parametreleri kullanılmaz, sıfır geçilir. 
      Çoklu bir yazı kutusu kontrolüne bu mesaj gönderildiğinde geri dönüş değeri, 
      görünen en üst satırın sıra numarasıdır. Tek satırlı yazı kutusu kontrolüne 
      gönderildiğinde geri dönüş değeri, görünen ilk karakterin sıra numarasıdır. |   
    | EM_GETHANDLE | Çok 
      satırlı yazı kutusu kontrolünün içerisindeki yazı için ayrılmış belleğin 
      tutamaç değerini almak amacıyla uygulama tarafından kontrole gönderilir. 
      wParam ve lParam parametreleri kullanılmaz, sıfır geçilir. Geri dönüş değeri 
      yazının saklandığı adres değeridir. Herhangi bir hata durumunda, örneğin 
      tek satırlı bir yazı kutusu kontrolüne bu mesaj gönderildiğinde geri dönüş 
      değeri sıfır olur. |   
    | EM_GETLIMITTEXT | Yazı 
      limiti verilmiş bir yazı kutusu kontrolünün limit değerini öğrenebilmek 
      amacıyla uygulama tarafından kontrole gönderilir. wParam ve lParam parametreleri 
      kullanılmaz, sıfır geçilir. |   
    | EM_GETLINE | Yazı 
      kutusunun bir satırında yer alan yazıyı alarak bir bellek bölgesine kopyalamak 
      amacıyla uygulama tarafından kontrole gönderilir. wParam parametresi olarak 
      hangi satırdaki yazının alınacağı bilgisi, lParam parametresi olarak ise 
      alınan yazının kopyalanacağı bellek bölgesinin adresi geçilir. Tek satırlı 
      yazı kutusu kontrolüne bu mesaj gönderilirken wParam parametresi kullanılmaz. 
      Geri dönüş değeri, kopyalanan karakter sayısını verir. Parametre olarak 
      verilen satır numarası, yazı kutusu kontrolünün toplam satır sayısından 
      daha fazla ise geri dönüş değeri sıfır olacaktır. Gönderilen tampon bölgeye 
      kopyalanan yazının sonuna null karakter eklenmez. |   
    | EM_GETLINECOUNT | Çok 
      satırlı bir yazı kutusu kontrolünün toplam satır sayısı bilgisinin öğrenilmesi 
      amacıyla uygulama tarafından kontrole gönderilir. wParam ve lParam parametreleri 
      kullanılmaz, sıfır geçilir. Geri dönüş değeri kontrolün sahip olduğu toplam 
      satır sayısıdır. Eğer kontrolde hiç yazı yoksa geri dönüş değeri 1 olur. |   
    | EM_GETMODIFY | Yazı 
      kutusu kontrolünün içeriğinin değişip değişmediğini öğrenmek amacıyla uygulama 
      tarafından kontrole gönderilir. wParam ve lParam parametreleri kullanılmaz, 
      sıfır geçilir. Eğer içerik değişmişse TRUE, değişmemişse FALSE değeri geri 
      döner. Windows sistemleri, kontrol içeriğinin değişip değişmediği bilgisini 
      kendi içinde oluşturduğu bir bayrak değişkende tutar. Bu bayrak değişkeni, 
      kontrol ilk yaratıldığında sıfırlanır. Eğer uygulama içerisinde kendimiz 
      bu bayrağı sıfırlamak istersek, kontrole EM_SETMODIFY mesajı göndermemiz 
      gerekir. |   
    | EM_GETPASSWORDCHAR | Yazı 
      kutusu kontrolünün şifreli bilgileri göstermek için kullanılan karakterini 
      öğrenmek amacıyla uygulama tarafından kontrole gönderilir. wParam ve lParam 
      parametreleri kullanılmaz, sıfır geçilir. Geri dönüş değeri, şifreli bilgileri 
      göstermek amacıyla kullanılan karakterdir. Eğer bu karakter belirtilmemişse 
      NULL değer geri döner. Yazı kutusu kontrolü, ES_PASSWORD pencere biçimiyle 
      yaratıldığında, varsayılan şifre karakteri asterisks (*) karakteri olarak 
      atanır. |   
    | EM_GETSEL | Yazı 
      kutusu kontrolündeki yazının parametre olarak verilen ilk ve son karakter 
      sıra numaraları arasında kalan kısmını öğrenmek amacıyla uygulama tarafından 
      kontrole gönderilir. wParam parametresi seçili yazının başlangıç pozisyonunu, 
      lParam parametresi seçili yazının bitiminden sonraki seçili olmayan ilk 
      karakterin pozisyonunu belirtir. Bu parametreler NULL geçilebilir. Geri 
      dönüş değeri, düşük anlamlı WORD değeri seçimin başlangıç pozisyonunu gösteren, 
      yüksek anlamlı WORD değeri seçili olan son karakterden sonraki ilk seçili 
      olmayan karakterin pozisyonunu gösteren 32 bitlik bir değerdir. Bu değerlerden 
      herhangi birisi 65.535 değerini aşarsa geri dönüş değeri -1 olur. Zengin 
      yazı kutusu kontrolünde (Rich edit control) seçim ilk 64K’lık kısımda saklanmaz, 
      bu nedenle bu kontrole EM_EXGETSEL mesajı gönderilmelidir. |   
    | EM_LIMITTEXT | Kullanıcının 
      yazı kutusu kontrolüne gireceği yazı miktarını sınırlandırmak ve bu sınır 
      miktarını belirtmek amacıyla uygulama tarafından kontrole gönderilir. wParam 
      parametresi olarak girilecek yazının sahip olacağı en fazla karakter sayısı 
      geçilir. lParam parametresi kullanılmaz, sıfır geçilir. wParam parametresi 
      olarak sıfır geçilirse, en fazla yazı uzunluğu tek satırlı yazı kutusu kontrolü 
      için 0x7FFFFFFE değerine; çok satırlı yazı kutusu kontrolü için 0xFFFFFFFF 
      değerine ayarlanır. Geri dönüş değeri yoktur. Bu mesaj, sadece kullanıcının 
      girebileceği yazının karakter sınırlandırmasını yapabilir. Bu mesaj gönderildiği 
      zaman, kontrolde hali hazırda bir yazı varsa, bu yazı sınırlandırmadan etkilenmez. 
      Aynı şekilde WM_SETTEXT mesajı ile kontrole kopyalanacak yazının uzunluğuna 
      da sınırlama getiremez. Bir yazı kutusuna, kullanıcı tarafından girilebilecek 
      yazının varsayılan uzunluğu 30.000 karakterdir. Zengin yazı kutusu kontrolü 
      kullanılıyorsa, 64K’dan daha uzun yazı uzunlukları için EM_EXLIMITTEXT mesajı 
      kullanılmalıdır. |   
    | EM_LINEFROMCHAR | Çok 
      satırlı yazı kutusu kontrolünün, parametre olarak geçilen karakter sıra 
      numarasını içeren satırının sıra numarasını öğrenmek amacıyla uygulama tarafından 
      kontrole gönderilir. Parametre olarak geçilen karakter sıra numarası, kontrolün 
      başından itibaren olan sırayı belirtir. wParam parametresi olarak karakter 
      sıra numarası geçilir. lParam parametresi kullanılmaz, sıfır geçilir. Eğer 
      wParam parametresi olarak -1 değeri geçilirse, o an aktif olan satırın veya 
      seçili bir satır varsa o satırın sıra numarası öğrenilir. Zengin yazı kutusu 
      kontrolünde, satır numarası öğrenilecek karakterin sıra numarası 64K’dan 
      daha büyükse EM_EXLINEFROMCHAR mesajı gönderilmelidir. |   
    | EM_LINEINDEX | Çok 
      satırlı yazı kutusu kontrolünün parametre olarak geçilen satır numarasının 
      ilk karakterinin sıra numarasını öğrenmek amacıyla uygulama tarafından kontrole 
      gönderilir. wParam parametresi olarak satır sıra numarası geçilir. lParam 
      parametresi kullanılmaz, sıfır geçilir. wParam parametresi olarak -1 değeri 
      geçilirse o an aktif olan satırın ilk karakterinin sıra numarası bilgisi 
      öğrenilir. Eğer gönderilen satır sıra numarası, kontrolün toplam satır sayısından 
      daha büyük bir değer ise -1 değeri, aksi takdirde ilgili satırın ilk karakterinin 
      sıra numarası geri döndürülür. |   
    | EM_LINELENGTH | Yazı 
      kutusu kontrolünün herhangi bir satırının uzunluğu bilgisinin öğrenilmesi 
      amacıyla uygulama tarafından kontrole gönderilir. wParam parametresi olarak, 
      satır sıra numarası bilgisinin alınması için bir karakter sıra numarası 
      geçilir. lParam parametresi kullanılmaz, sıfır geçilir. Çok satırlı yazı 
      kutusu kontrolüne bu mesaj gönderileceği zaman, önce EM_LINEINDEX mesajı 
      kontrole gönderilmeli ve mesaja parametre olarak geçilecek karakterin satır 
      sıra numarası öğrenilmelidir. |   
    | EM_LINESCROLL | Çok 
      satırlı yazı kutusu kontrolündeki yazının yatay veya dikey olarak kaydırılması 
      amacıyla uygulama tarafından kontrole gönderilir. wParam parametresi olarak 
      yatay kaydırılacak karakter sayısı; lParam parametresi olarak dikey kaydırılacak 
      satır sayısı geçilir. Bu mesaj çok satırlı yazı kutusu kontrolüne gönderildiğinde 
      TRUE değeri, tek satırlı yazı kutusu kontrolüne gönderildiğinde FALSE değeri 
      geri döndürülür. |   
    | EM_REPLACESEL | Yazı 
      kutusunun seçili olan yazı bilgisini, başka bir yazı ile değiştirmek amacıyla 
      uygulama tarafından kontrole gönderilir. Mesajın wParam parametresi olarak 
      yapılacak değiştirme işleminin geri alınabilir olup olmadığını belirten 
      bir değer, lParam parametresi olarak yeni yazının adres bilgisi geçilir. 
      wParam parametresi olarak TRUE geçilirse yapılacak değiştirme işlemi geri 
      alınabilir, FALSE geçilirse geri alınamaz. lParam parametresindeki adreste, 
      yazı kutusuna yerleştirilecek olan ve sonuna null karakter eklenmiş olan 
      yazı bulunmalıdır. Geri dönüş değeri yoktur. Bu mesaj, yazı kutusundaki 
      yazının sadece bir bölümü başka bir yazı ile değiştirileceği zaman kullanılmalıdır. 
      Tüm yazı değiştirilecekse WM_SETTEXT mesajının kullanılması daha anlamlıdır. 
      Bu mesaj yazı kutusu kontrolüne gönderildiğinde, kontrolde seçili bir yazı 
      yoksa, yeni yazı o an kursörün geçerli olduğu pozisyondan itibaren eklenir. |   
    | EM_SCROLL | Çok 
      satırlı yazı kutusundaki kontrolündeki yazının dikey olarak kaydırılması 
      amacıyla uygulama tarafından kontrole gönderilir. Kontrole bu mesajı göndermek 
      ile WM_VSCROLL mesajının gönderilmesi aynı işlevi görür. Mesajın wParam 
      parametresi olarak kaydırma işleminin türü geçilir. lParam parametresi kullanılmaz, 
      sıfır geçilir. wParam parametresinin alabileceği değerler ve anlamları şunlardır 
      : 
     - SB_LINEDOWN : Bir satır aşağıya kaydırma
     - SB_LINEUP : Bir satır yukarıya kaydırma
     - SB_PAGEDOWN : Bir sayfa aşağıya kaydırma
     - SB_PAGEUP : Bir sayfa yukarıya kaydırma  
      Mesajın başarılı 
        olması durumunda geri dönüş değerinin yüksek anlamlı WORD değeri TRUE 
        olur, yüksek anlamlı WORD değeri ise kaydırılan satır sayısını belirtir. 
        wParam parametresi olarak yanlış bir değer geçilirse FALSE değeri geri 
        döndürülür.
 
 
 
 |   
    | EM_SETHANDLE | Çok 
      satırlı yazı kutusu kontrolünün kullandığı bellek bölgesinin tutamaç değerini 
      değiştirmek amacıyla uygulama tarafından kontrole gönderilir. wParam parametresi 
      olarak bellek bölgesinin tutamaç değeri geçilir. lParam parametresi kullanılmaz, 
      sıfır geçilir. Bu mesajı alan yazı kutusu kontrolü, içerisindeki yazı bilgisini 
      saklamak amacıyla, kendisi bir alan tahsis etmez, wParam parametresinde 
      belirtilen adres bölgesini kullanır. Gerekli olduğu takdirde bu alan üzerinden 
      yeniden tahsisat işlemi yapar. Geri dönüş değeri yoktur. Uygulama, kontrolün 
      kullandığı bellek bölgesini değiştirmeden önce bu bellek bölgesinin tutamaç 
      değerini EM_GETHANDLE mesajı göndererek almalı ve free fonksiyonu ile bu 
      alanı boşaltmalıdır. Kontrol, kendisi için verilen bellek bölgesinin uzunluğundan 
      daha fazla bir alana gereksinim duyduğunda bu alanı otomatik olarak büyütür. 
      EM_SETHANDLE mesajı kontrole gönderildiğinde, geri alma tamponu ve değiştirilme 
      durumunu tutan bayrak sıfırlanır. Bu durumda kontrole EM_CANUNDO mesajı 
      gönderildiğinde sıfır değeri, EM_GETMODIFY mesajı gönderildiğinde sıfır 
      değeri alınır. Kontrolün penceresi yeniden çizilir. |   
    | EM_SETLIMITTEXT | Yazı 
      kutusu kontrolündeki yazının belli bir karakter sayısı ile sınırlandırılması 
      amacıyla uygulama tarafından kontrole gönderilir. wParam parametresi olarak 
      yazının en fazla sahip olabileceği karakter sayısı geçilir. lParam parametresi 
      kullanılmaz, sıfır geçilir. wParam parametresi olarak sıfır geçilirse, kontrole 
      en büyük limit değeri atanır. Tek satırlı yazı kutusu kontrolü için en fazla 
      karakter sayısı 32.766, çok satırlı yazı kutusu kontrolü için en fazla karakter 
      sayısı 65.535 olabilir. Geri dönüş değeri yoktur. |   
    | EM_SETMODIFY | Yazı 
      kutusu kontrolünün değiştirilme bilgisini tutan bayrağının ayarlanması veya 
      sıfırlanması amacıyla uygulama tarafından kontrole gönderilir. Değiştirilme 
      bayrağı, daha önce de değindiğimiz gibi yazı kutusu kontrolündeki yazının 
      ayarlandıktan sonra değiştirilip değiştirilmediğini tutuyordu. Kullanıcı 
      kontroldeki yazıyı değiştirdiği zaman bu bayrak otomatik olarak ayarlanır. 
      wParam parametresi olarak bayrak değişkenine verilecek değer geçilir. lParam 
      parametresi kullanılmaz, sıfır geçilir. wParam parametresine TRUE geçilmesi 
      kontroldeki yazının değiştirildiği, FALSE geçilmesi ise değiştirilmediğini 
      ifade eder. Mesajın geri dönüş değeri yoktur. |   
    | EM_SETPASSWORDCHAR | Tek 
      satırlı yazı kutusu kontrolünün şifre karakterinin değiştirilmesi amacıyla 
      uygulama tarafından kontrole gönderilir. wParam parametresi olarak şifre 
      karakteri geçilir. lParam parametresi kullanılmaz, sıfır geçilir. Mesajın 
      geri dönüş değeri yoktur. Bu mesajı alan yazı kutusu kontrolündeki görünen 
      karakterler, verilen karakter kullanılarak yeniden yazılır. Kontrol ES_PASSWORD 
      biçimi kullanılarak oluşturulduğunda varsayılan şifre karakteri asterisks 
      (*) karakteri olur. EM_SETPASSWORDCHAR mesajı, wParam parametresi olarak 
      sıfır geçilerek yazı kutusu kontrolüne gönderildiğinde, kontrolün ES_PASSWORD 
      biçim özelliği kaldırılır. |   
    | EM_SETREADONLY | Yazı 
      kutusu kontrolünün sadece okunurluk özelliğinin değiştirilmesi amacıyla 
      uygulama tarafından kontrole gönderilir. wParam parametresi olarak sadece 
      okunur olup olmama özelliğini ifade eden bir değer geçilir. lParam parametresi 
      kullanılmaz, sıfır geçilir. wParam parametresi olarak TRUE değeri geçildiğinde 
      kontrol sadece okunur özelliğe sahip olur, FALSE değeri geçildiğinde kontroldeki 
      yazı bilgisi değiştirilebilir. İşlemin başarılı olması durumunda, sıfır 
      dışı bir değer, başarısızlık durumunda ise sıfır değeri geri döndürülür. |   
    | EM_SETSEL | Yazı 
      kutusundaki yazının bir bölümünün seçilir hale getirilmesi amacıyla uygulama 
      tarafından kontrole gönderilir. wParam parametresi olarak seçimin başlangıç 
      pozisyonu, lParam parametresi olarak seçimin bitiş pozisyonu geçilir. Geri 
      dönüş değeri yoktur. Başlangıç pozisyonu olarak sıfır, bitiş pozisyonu olarak 
      -1 değerleri geçildiğinde kontroldeki yazının tamamı seçilir. |   
    | EM_UNDO | Yazı 
      kutusu kontrolünde son yapılan işlemi geri almak amacıyla uygulama tarafından 
      kontrole gönderilir. wParam ve lParam parametreleri kullanılmaz, sıfır geçilir. 
      Geri dönüş değeri tek satırlı yazı kutusu kontrolü için her zaman TRUE değeridir; 
      çok satırlı yazı kutusu kontrolü için geri alma işleminin başarılı olması 
      durumunda TRUE, aksi takdirde FALSE değeridir. |   
    | WM_COMMAND | Yazı 
      kutusu kontrolü, ana penceresine bir bilgi mesajı ileteceği zaman gönderilir. |   
    | WM_COPY | Yazı 
      kutusu kontrolündeki yazının kopyalanması istendiğimde uygulama tarafından 
      kontrole gönderilir. wParam ve lParam parametreleri kullanılmaz, sıfır geçilir. 
      Geri dönüş değeri yoktur. |   
    | WM_CTLCOLOREDIT | Yazı 
      kutusu kontrolü herhangi bir sebepten ötürü yeniden çizileceği zaman kontrolün 
      ana penceresine gönderilir. wParam parametresi olarak DC’nin (Device Context) 
      tutamaç değeri, lParam olarak ise kontrolün tutamaç değeri geçilir. Geri 
      dönüş değeri fırçanın tutamaç değeridir. |   
    | WM_CUT | Yazı 
      kutusu kontrolündeki seçili olan yazının kopyalanarak silinmesi istendiğimde 
      uygulama tarafından kontrole gönderilir. wParam ve lParam parametreleri 
      kullanılmaz, sıfır geçilir. Geri dönüş değeri yoktur. |   
    | WM_PASTE | O 
      an kopyalanmış halde bellekte bulunan bilginin yazı kutusu kontrolüne yapıştırılması 
      istendiğinde uygulama tarafından kontrole gönderilir. wParam ve lParam parametreleri 
      kullanılmaz, sıfır geçilir. |   
    | WM_UNDO | Yazı 
      kutusu kontrolünde son yapılan işlemin geri alınması için uygulama tarafından 
      kontrole gönderilir. wParam ve lParam parametreleri kullanılmaz, sıfır geçilir. |  
 
 
  Kontrollere mesaj 
  göndermek için SendMessage API fonksiyonunu kullandık. Birinci kontrolümüze, 
  EM_SETLIMITTEXT mesajını göndererek, kullanıcının girebileceği karakter sayısını 
  en fazla 10 karakter olacak şekilde sınırladık. İkinci kontrolümüze, EM_SETREADONLY 
  mesajını göndererek, kontrole sadece okunur özellik atadık ve kullanıcının kontroldeki 
  yazıyı değiştirememesini sağladık. Üçüncü kontrolümüze EM_REPLACESEL mesajını 
  göndererek, mesaj gönderildiği anda kontrolde seçili olan yazının, lParam parametre 
  değişkeni yerine geçilen ’Yeni yazı’ karakter katarı ile değiştirilmesini sağladık. 
  Dördüncü kontrolümüze EM_LINELENGTH mesajını göndererek, kontroldeki yazının 
  uzunluk bilgisini aldık ve bu bilgiyi MessageBox fonksiyonu ile kullanıcıya 
  bir mesaj kutusu içerisinde gösterdik. Beşinci kontrolümüze EM_GETLINE mesajını 
  göndererek, kontroldeki yazının lParam parametresi yerine geçtiğimiz bellek 
  bölgesine kopyalanmasını sağladık ve bu yazıyı MessageBox fonksiyonunu çağırarak 
  kullanıcıya bir mesaj kutusu içerisinde gösterdik. Altıncı kontrolümüze EM_GETPASSWORDCHAR 
  mesajını göndererek, şifreleme karakteri olarak kullanılan karakteri öğrendik 
  ve bu karakteri kullanıcıya bir mesaj kutusu oluşturarak gösterdik. Hemen ardından 
  kontrole EM_SETPASSWORDCHAR mesajını, wParam parametre değişkeni yerine sıfır 
  değerini geçerek gönderdik ve kontroldeki şifreleme özelliğini kaldırdık. Artık 
  kontrole girilen bilgiler, olduğu gibi görünecektir. Yedinci kontrolümüze ise 
  EM_GETLINECOUNT mesajını göndererek kontrolün kaç satıra sahip olduğunu öğrendik 
  ve bu bilgiyi kullanıcıya bir mesaj kutusunda gösterdik. 
    | static int 
        rightCounter = 0; //...
 
 LRESULT CALLBACK 
        WndProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam)
 {
     
        switch(message) {
         case WM_RBUTTONDOWN :
     
                switch (rightCounter) {
                 int number;
                 char passChar[2];
                 char lineString[20];
 
     
                    case 0 :
                     
        SendMessage(editControls[rightCounter],EM_SETLIMITTEXT,10,0);
                     
        break;
                 case 1 
        :
                     
        SendMessage(editControls[rightCounter],EM_SETREADONLY,TRUE,0);
                     
        break;
                 case 2 
        :
                     
        SendMessage(editControls[rightCounter],EM_REPLACESEL,FALSE,"Yeni 
        yazı");
                     
        break;
                 case 3 
        :
                     
        number = SendMessage(editControls[rightCounter],EM_LINELENGTH,1,0);
                     
        itoa(number,lineString,20);
                     
        MessageBox(NULL,lineString,"Bilgi",MB_OK);
                     
        break;
                 case 4 
        :
                     
        SendMessage(editControls[rightCounter],EM_GETLINE,0,lineString);
                     
        MessageBox(NULL,lineString,"Bilgi",MB_OK);
                     
        break;
                 case 5 
        :
                     
        passChar[0] = SendMessage(editControls[rightCounter],EM_GETPASSWORDCHAR,0,0);
                     
        passChar[1] = ’\0’;
                     
        MessageBox(NULL,passChar,"Bilgi",MB_OK);
                     
        SendMessage(editControls[rightCounter],EM_SETPASSWORDCHAR,0,0);
                     
        break;
                 case 6 
        :
                     
        number = SendMessage(editControls[rightCounter],EM_GETLINECOUNT,0,0);
                     
        itoa(number,lineString,20);
                     
        MessageBox(NULL,lineString,"Bilgi",MB_OK);
                     
        break;
             }
             rightCounter++;
     
                break;
     
                //...
 }
 
 
 |  
 Yazı 
  Kutusu Kontrolünün Gönderdiği Bilgi Mesajları
 
 Kullanıcı klavye 
  ve fare gibi harici araçları kullanarak düzenleme taleplerinde bulunabilir. 
  Windows sistemleri, her talebi yazı kutusu kontrolünün ana penceresine, talebin 
  niteliğini belirten bir mesaj ile WM_COMMAND mesajı aracılığı ile iletir. Bu 
  mesaj, wParam parametresinin düşük anlamlı WORD değerinde yazı kutusu kontrolünün 
  tanımlayıcı değerini, yüksek anlamlı WORD değerinde kullanıcının yaptığı işlemi 
  ifade eden bir değeri; lParam parametresinde ise kontrolün tutamaç değerini 
  verir.
 
 Uygulama, her bilgi 
  mesajını doğru bir şekilde işleyebilmeli ve mesaja uygun yanıtlar üretebilmelidir. 
  Yazı kutusu kontrolünün gönderdiği bilgi mesajları şunlardır :
 
 
 
  Yazı kutusunun 
  görünümü güncellenmeden hemen önce, sistem, kontrolün ana penceresine WM_CTLCOLOREDIT 
  mesajı gönderir. Ana pencere bu mesaj ile gelen tutamaç değerini kullanarak 
  kontrolün yazısını ve arka plan rengini değiştirebilir. 
    | YAZI 
        KUTUSU KONTROLÜNÜN GÖNDERDİĞİ MESAJ | ANLAMI |   
    | EN_CHANGE | Kullanıcı 
      yazı kutusu kontrolündeki yazıyı değiştirdiği zaman gönderilir. Bu mesaj 
      gönderilmeden önce Windows, görüntüyü yeniler. |   
    | EN_ERRSPACE | Yazı 
      kutusu kontrolü, talep edilmiş bir işlem için yeterli miktarda bellek bölgesini 
      tahsis edemediği zaman gönderilir. |   
    | EN_HSCROLL | Kullanıcı 
      yazı kutusu kontrolünün yatay kaydırma çubuğuna tıkladığı zaman gönderilir. 
      Mesaj görüntü yenilenmeden önce gönderilir. |  
    | EN_KILLFOCUS | Kullanıcı 
      pencerede başka bir kontrol seçtiğinde ve yazı kutusu kontrolüne odaklanma 
      sonlandırıldığında gönderilir. |   
    | EN_MAXTEXT | Kullanıcı, 
      yazı kutusu kontrolü için getirilen karakter sayısı limitini aştığı zaman 
      gönderilir. Fazladan girilen karakterler yazılmaz. Ayrıca bu mesaj, kontrol 
      ES_AUTOHSCROLL pencere biçimine sahip olmadan yaratılmış ve girilen karakter 
      sayısı kontrolün genişliğini aşmışsa ve kontrol ES_AUTOVSCROLL pencere biçimine 
      sahip olmadan yaratılmış ve girilen toplam satır sayısı kontrolün yüksekliğini 
      aşmışsa da gönderilir. |   
    | EN_SETFOCUS | Kullanıcı 
      yazı kutusu kontrolünü seçtiğinde gönderilir. |   
    | EN_UPDATE | Kullanıcı 
      kontroldeki yazıyı değiştirdiğinde, sistem yeni yazıyı göstermek üzereyken 
      gönderilir. Mesaj yeni yazı alındıktan ancak henüz gösterilmiyorken gönderilir. 
      Bu sayede uygulama kontrolün genişliğini ayarlayabilir. |   
    | EN_VSCROLL | Kullanıcı 
      kontrolün dikey kaydırma çubuğuna tıkladığı zaman gönderilir. Mesaj, ekran 
      güncellenmeden önce gönderilir. |  
 Uygulamamızdaki 
  ilk üç kontrol için, EN_CHANGE, EN_KILLFOCUS ve EN_SETFOCUS mesajlarının işlenmesini 
  ele almak için kodumuza şunları ekleyelim :
 
 
 
	Kaynak kod dosyamızın 
  başına, ele alacağımız olaylar olduğu durumda çalışmasını istediğimiz fonksiyonların 
  prototip bildirimlerini ekledik. Kontrollerin gönderdikleri bilgi (notification) 
  mesajları, pencere fonksiyonunda WM_COMMAND mesajının alınması durumunda işlenirler. 
  Pencere fonksiyonuna gelen wParam parametresinin düşük anlamlı WORD değeri ve 
  yüksek anlamlı WORD değeri, LOWORD ve HIWORD makroları ile elde edilerek, kontrolden 
  gelen mesaj hakkında bilgi edinilir. İlk yazı kutusu kontrolümüz için işleyeceğimiz 
  mesaj, kontrolün yazı limitinin aşılması durumunda gönderilen mesaj olan EN_MAXTEXT 
  mesajıdır. Kontrolden bu mesajın alınması durumunda çağrılmak üzere, OnEdit1TextChange 
  isimli fonksiyonumuzu yazdık ve bu fonksiyonda kullanıcıya yazı limitinin aşıldığına 
  dair bir bilgi mesajı gösterdik. İkinci yazı kutusu kontrolü için, kullanıcının 
  kontrolü aktif hale getirdiği sırada kontrol tarafından gönderilen EN_SETFOCUS 
  mesajını işledik ve bu mesajın alınması durumunda çağırmak üzere OnEdit2SetFocus 
  isimli fonksiyonu yazdık. Bu fonksiyonda da kullanıcıya bir bilgi mesajı gösterdik. 
  Üçüncü yazı kutusu kontrolümüz için, kullanıcı kontrolün aktif olan kontrolün 
  aktifliğini başka bir kontrol seçerek sonlandırdığı sırada kontrol tarafından 
  gönderilen EN_KILLFOCUS mesajını işledik ve bu mesajın alınması durumunda çağırmak 
  üzere OnEdit3KillFocus isimli fonksiyonu yazdık. Yine bu fonksiyonda da kullanıcıya 
  bir bilgi mesajı gösterdik.
		
    | //... void OnEdit1TextChange();
 void OnEdit2SetFocus();
 void OnEdit3KillFocus();
 //...
 
 
 LRESULT CALLBACK 
        WndProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam)
 {
     switch(message) {
         case WM_COMMAND :
             if (LOWORD(wParam) == 
        ID_EDITBOX_1 && HIWORD(wParam) == EN_MAXTEXT)
                 OnEdit1TextChange();
             if (LOWORD(wParam) == 
        ID_EDITBOX_2 && HIWORD(wParam) == EN_SETFOCUS)
                 OnEdit2SetFocus();
             if (LOWORD(wParam) == 
        ID_EDITBOX_3 && HIWORD(wParam) == EN_KILLFOCUS)
                 OnEdit3KillFocus();
             break;
         //...
     }
     return 0;
 }
 //...
 
 
 void OnEdit1TextChange()
 {
     MessageBox(NULL,"1. Kontrolün maksimum yazı limiti 
        aşıldı..","Uyarı",MB_OK);
 }
 
 void OnEdit2SetFocus()
 {
     MessageBox(NULL,"2. Kontrol seçildi...","Bilgi",MB_OK);
 }
 
 void OnEdit3KillFocus()
 {
     MessageBox(NULL,"3. Kontrolden çıkıldı...","Bilgi",MB_OK);
 }
 
 
 |  
 EN_MAXTEXT mesajının 
  alınması için, kullanıcı ilk kontrole, o kontrol için belirlenen karakter sayısı 
  limitinden daha fazla sayıda karakter içeren bir yazı girmelidir. İlk yazı kutusu 
  kontrolümüzü oluştururken, bu kontrol için herhangi bir sınırlama getirmemiştik. 
  Ancak fareye sağ tıklayarak kontrollere mesaj gönderirken, ilk kontrolün yazısının 
  karakter sayısına sınırlama getirmiştik. Bu mesajın alınması için öncelikle 
  uygulamanın çalışması sırasında farenin sağ tuşuna tıklayarak kontrolün karakter 
  sayısının sınırlandırılmasını sağlamalısınız. Uygulamamızın son halini çalıştırdığımızda, 
  yukarıda işlenen mesajların alınması durumunda karşılaşacağımız görüntüler şöyle 
  olacaktır :
 
 
  
 
  
 
  
 Bu uygulamamızda, 
  standart bir Windows kontrolü olan yazı kutusu kontrolünün ne olduğunu, nasıl 
  kullanıldığını, bu kontrole nasıl mesaj gönderildiğini, bu kontrolden gelen 
  mesajların nasıl işleneceğini ele aldık. Diğer standart kontrollere mesaj gönderme 
  ve bu kontrollerden gelen mesajları işleme de temelde aynı mantıkla yapılmaktadır. 
  Standart kontrolleri sırasıyla ele alacağımız önümüzdeki yazılarımızda, mesajların 
  işlenmesi ve gönderilmesi konularında örnek uygulamalar yapmaya devam edeceğiz. 
  Uygulamaya ilişkin kaynak kod dosyalarını buradan indirebilirsiniz.
 
 Bir sonraki yazımızda 
  görüşmek üzere, mutlu günler dilerim.
 
 
 
                Makale:Windows API - Yazı Kutusu Kontrolünün Oluşturulması ve Kullanımı C ve Sistem Programlama Çiğdem Çavdaroğlu
 |