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 degeri degeri iliskin kontrol kontrole kontroller kullanilarak makrosu parametresi pencere saglar. sembolik standart statik 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 : 24.11.2005
Okunma Sayısı : 29084
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 21.11.2024
Turhal Temizer
Mac OS/X Removing CUDA 21.11.2024
Burak Selim Şenyurt
Rust ile ECS Yaklaşımını Anlamak 21.11.2024
Burak Selim Şenyurt
Birlikte Rust Öğrenelim Serisi 21.11.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 - Standart Kontroller ve Statik Kontrol
 
Kapat
Sayfayı Yazdır Sık Kullanılanlara Ekle Arkadaşıma Gönder MySpace Del.Ico.Us Digg Facebook Google Mixx Reddit StumbleUpon
Windows sistemlerinde, pencerelerin nasıl oluşturulacağına ilişkin bilgileri önceki yazılarımızda ele almıştık. Bu bilgileri gözden geçirerek özetleyelim : Öncelikle oluşturmak istediğimiz pencereye ilişkin özellikleri belirtmek için WNDCLASS yapısı türünden bir nesne oluşturarak, bu yapı nesnesinin veri elemanlarına pencere özelliklerimize ilişkin bilgileri atıyorduk :

   //...
   WNDCLASS wndClass;
   //...

   wndClass.style = CS_HREDRAW | CS_VREDRAW;
   wndClass.lpfnWndProc = (WNDPROC)WndProc;
   wndClass.cbClsExtra = 0;
   wndClass.cbWndExtra = 0;
   wndClass.hInstance = hInstance;
   wndClass.hIcon = LoadIcon(NULL,IDI_WINLOGO);
   wndClass.hCursor = LoadCursor(NULL,IDC_ARROW);
   wndClass.hbrBackground = (HBRUSH)CreateSolidBrush(RGB(0,0,0));;
   wndClass.lpszMenuName = NULL;
   wndClass.lpszClassName = "gui";
   //...

Pencere özelliklerimizi belirttikten sonra, sisteme penceremizi tanıtmak amacıyla RegisterClass fonksiyonunu çağırıyorduk ve yeni pencere türümüzü sisteme kaydediyorduk. Bir uygulama içerisinde sisteme tanıttığımız pencere sınıfları, uygulama sonuna kadar sistemde kalıyordu. Bir pencere sınıfını RegisterClass fonksiyonu ile sisteme kaydetmeden, o pencere sınıfından CreateWindow vb bir fonksiyon ile bir pencere oluşturamıyorduk. Peki kontol ve standart kontroller ne anlama gelmektedir?

Kontrol Nedir?

Windows sistemlerinde kontroller, bir uygulamanın temel giriş çıkış işlemlerini yapabilmek için kullandığı alt pencereler olarak tanımlanır. Kontroler, kullanıcıya bir seçeneği seçtirmek, kullanıcıdan bir bilgi almak ve kullanıcıya elde ettiği bir bilgiyi göstermek gibi çok çeşitli amaçlar için kullanılmaktadır.

Standart Kontroller Nedir?

Windows sistemleri açılırken, sisteme otomatik olarak kaydedilen bazı pencere sınıfları vardır. Bu pencere sınıflarını kullanarak oluşturduğumuz pencereler standart Windows kontrolleri olarak bilinir. Bu pencerelere ilişkin pencere fonksiyonları da yazılmış bir biçimde sistemde bulunmaktadır. Windows uygulamalarında, pencereler üzerinde gördüğümüz yazı kutuları (Edit, Text Box), düğmeler (Button), listeleme kutuları (List Box), bileşik giriş kutuları (Combo Box), araç çubukları (Tool Bar), menüler vb alanların hepsi Windows kontrolleridir. Bu kontrollere ilişkin pencere sınıfları bizim için yazılmış ve sisteme kaydedilmiş durumdadır. Bu pencerelere ilişkin pencere fonksiyonları da yazılmış olarak sistemde bulunmaktadır. Bir kontrol oluşturmak için biizm tek yapmamız gereken, o kontrole ilişkin pencere sınıfını kullanarak CreateWindow gibi pencere oluşturan bir fonksiyonu çağırmaktır.

HWND CreateWindow (
    LPCTSTR lpClassName,      //Sisteme tanıtılan pencere sınıf ismi
    LPCTSTR lpWindowName,  //Pencere başlığında görüntülenecek yazı
    DWORD dwStyle,             //Pencere biçimi
    int x,                            //Pencerenin yatay pozisyonu
    int y,                            //Pencerenin dikey pozisyonu
    int nWidth,                    //Pencere genişliği
    int nHeight,                   //Pencere yüksekliği
    HWND hWndParent,         //Parent ya da owner pencere tutamaç değeri
    HMENU hMenu,              //Menü veya child pencere tutamaç değeri
    HANDLE hInstance,         //Uygulamanın çalıştırılma adresi
    LPVOID lParam               //Pencere yaratılma bilgileri göstericisi
);
CreateWindow fonksiyonu ile standart bir kontrol oluşturulurken pencere sınıfı ismi olarak, o kontrole ilişkin pencere sınıfı ismi kullanılır. Fonksiyonun ikinci parametresi, pencere oluştururken, pencere başlığında görüntülenecek başlık yazısını belirtiyordu. Kontrol oluştururken ise bu parametre, kontrolün türüne göre değişik anlamlara gelir. Örneğin statik kontrolde kontrolün üzerinde görüntülenecek yazı, yazı kutusu kontrolünde kutunun içindeki yazı gibi anlamlara gelirken, listeleme kutusu gibi bazı kontrollerde de bu parametre hiçbir anlam ifade etmemektedir ve boş bırakılabilir. CreateWindow fonksiyonunun üçüncü parametresi, oluşturulacak pencerenin biçimi ile ilgiliydi. Kontrol oluştururken de bu parametre benzer anlam ifade eder. Ancak bu parametre değişkeni yerine geçeceğimiz sembolik sabitler, kontrolün türüne göre değişebilir. Bazı kontroller için özel anlamlar taşıyan pencere biçimi sembolik sabitleri tanımlanmıştır. Pencerenin yatay ve düşey pozisyonunu belirten x ve y parametreleri, kontrol oluşturulurken başlangıç noktası kontrolün ana penceresinin sol üst köşesi orijin noktası olarak kabul edilerek hesaplanır. Fonksiyonun HMENU türündeki parametresi, kontrol oluşturulurken o kontrolün tanımlayıcı (ID) değeri olarak verilir.

Windows sistemlerinde sıklıkla kullanılan standart kontroller şunlardır :

    1. Düğme kontrolü (Button Control)
    2. Statik kontrol (Static control)
    3. Bileşik giriş kutusu kontrolü (Combo box control)
    4. Listeleme kutusu kontrolü (List box control)
    5. Yazı kutusu kontrolü (Edit Control)
    6. Liste görünümü kontrolü (List view control)
    7. Durum çubuğu kontrolü (Status bar control)
    8. Akıtma çubuğu kontrolü (Scrool bar control)
    9. Sekme kontrolü (Tab page control)
    10. Ağaç görünümü kontrolü (Tree view control)
    11. Seçenek kutusu kontrolü (Check box control)
    12. Seçenek düğmesi kontrolü, radyo düğmesi kontrolü (Radio button control)
    //...

Ayrıca bu kontrollerin bir arada kullanılmasıyla ve kontrollere ilave bir takım özellikler eklenmesiyle yeni kontroller elde edilir. Yeni nesne yönelimli programlama dillerinin derleyici IDE’lerinde Araç Çubuğu (ToolBox) başlığı altında birçok kontrol görürüz. Bu kontroller, sistemde tanımlı olarak bulunan standart kontroller kullanılarak oluşturulmuştur. Bu dillerde kontroller Windows API programlama kullanılmaksızın sürükle-bırak tekniği ile uygulamaya eklenirler. Ancak bu kontroller arka planda, Windows API yardımıyla oluşturulur ve bizim kod yazmamıza gerek kalmaz.

Yukarıda bahsettiğimiz kontroller bir Windows penceresi üzerinde şu şekilde görünür :



Kontrollerin Pencere Biçimleri

Kontroller oluşturulurken CreateWindow fonksiyonunun üçüncü parametresi olan ve pencere biçimini belirleyen parametreye WS_CHILD biçimi mutlaka verilmelidir. Çünkü tüm kontroller belli bir ana pencerenin alt penceresi olarak oluşturulurlar. Her kontrolün kendisine özel olarak tanımlanmış bazı pencere biçimleri de vardır. Bu biçimleri ifade eden sembolik sabitler, ilk iki harfi kontrolü temsil edecek şekilde isimlendirilmiş ve tanımlanmışlardır. Kontrolleri ele alırken bu özel pencere biçimlerine ve ne anlama geldiklerine değineceğiz.

Kontroller ile Haberleşme

Kontroller ile haberleşme konusunu iki başlık altında inceleyebiliriz. İlk başlığımız kontrollerin belli işlemleri yapmasını sağlayabilmek için, onlara uygulama içerisinden mesajlar göndermek; ikinci başlığımız ise kontrollerin belli durumlar oluştuğu takdirde uygulamamıza mesaj göndermesidir.

Nasıl ki pencereleri oluşturduktan sonra onlara API fonksiyonları ile mesajlar gönderiyor ve onlardan gelen mesajları alıp yorumluyorsak, kontroller ile çalışırken de aynı API fonksiyonlarını kullanarak kontroller ile haberleşebilir ve onların belli işlemleri yapmasını, ayrıca onlardan gelen mesajları alarak yorumlayabilir ve uygulamamızın buna göre davranmasını sağlayabiliriz. Kontrollere göndereceğimiz mesajlar da, tıpkı pencere biçimleri gibi, ilk iki harfleri mesajın ilişkin olduğu kontrolü belirtecek şekilde isimlendirilmiş ve sembolik sabitler olarak tanımlanmışlardır. SendMessage veya PostMessage fonksiyonlarının ilk parametresi olarak kontrolün tutamaç değerini verip, ikinci parametrelerine bu mesajlara ilişkin sembolik sabitleri geçtiğimizde kontrol ona yaptırmak istediğimiz işi anlar ve yerine getirir. Mesajlara ilişkin bu sembolik sabitlerin ilk iki harfinden sonraki kısımları, mesajın anlamını ifade edecek şekilde verilmiştir.

Kontroller de durumlarındaki değişiklikleri üst pencerelere mesajlaşma yoluyla iletirler. Kontroller bir durumu üst pencereye WM_COMMAND mesajı göndererek iletirler. WM_COMMAND mesajı, iki bilgi içerir. Bu değerden, LOWORD makrosu ile düşük anlamlı WORD değeri, HIWORD makrosu ile yüksek anlamlı WORD değeri alınarak iki parametre elde edilir. Düşük anlamlı WORD değeri, mesajın hangi kontrolden geldiğini belirten tanımlayıcı değerdir. Yüksek anlamlı WORD değeri ise, mesajın hangi nedenle gönderildiğini ifade eder. Kontrollerden gelen mesajlar da, aynı isimlendirme tekniği kullanılarak sembolik sabitler olarak tanımlanmışlardır.

Uygulama içerisinde, bir kontrol oluşturulduktan sonra SendMessage veya PostMessage fonksiyonları kullanılarak kontrollere istenildiği anda bir mesaj gönderilmesi sağlanabilir. Bunun için tek ihtiyacımız olan, kontrol oluşturulurken elde ettiğimiz kontrole ilişkin tutamaç değeri ve göndermek istediğimiz mesajı ifade eden sembolik sabit ifadesidir. Kontrollerden gelen mesajları aldığımız kısım ise, pencere fonksiyonu içerisinde gönderilen mesajları işlediğimiz switch-case ifadesinde WM_COMMAND mesajının ele alınması kısmıdır. Daha önce de bahsettiğimiz gibi bu mesajdan, mesajın hangi kontrolden ne amaçla gönderildiği bilgileri edinilebilir.

switch (message)
{
    //...
    case WM_COMMAND :
    //...
    default :
    //...
}
Şimdi küçük bir uygulama yaparak, en basit kontrollerden birisi olan statik kontrolün nasıl oluşturulduğunu ve bu kontrol ile haberleşme işlemlerini inceleyelim.

Statik Kontrolün (Static Control) Oluşturulması ve Kullanılması

Statik kontrolün oluşturulması için, static sınıf ismi kullanılarak bir pencere oluşturulur. Static ismi, bu kontrol için önceden tanımlanarak sisteme kaydedilmiş olarak bulunan standart kontrol pencere ismidir. Pencerelerin oluşturulması konusunu önceki yazılarımızda ele aldığımız için kodun o kısmını geçerek, ana penceremizin pencere fonksiyonunu ele alalım. Ön bilgi olarak, uygulamamızın başlangıç fonksiyonu olan WinMain fonksiyonunda siyah renkli bir pencere oluşturduğumuzu belirtelim.

LRESULT CALLBACK WndProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam)
{
    static HWND hStaticControl1, hStaticControl2;
    char title1[26] = "Statik Kontrolümüz Oluştu";
    char title2[28] = "1. Statik kontrolün başlığı";
    char title3[28];

    switch(message) {
       case WM_CREATE :
          hStaticControl1 = CreateWindow("static",title1,WS_CHILD | WS_VISIBLE,
                                                    100,100,200,30,hWnd,(HMENU)ID_STATIC_CONTROL1,
                                                    ((LPCREATESTRUCT)lParam)->hInstance,NULL);

          hStaticControl2 = CreateWindow("static","",WS_CHILD | WS_VISIBLE,
                                                    350,100,200,30,hWnd,(HMENU)ID_STATIC_CONTROL2,
                                                    ((LPCREATESTRUCT)lParam)->hInstance,NULL);

          break;

       case WM_LBUTTONDOWN :
          SetWindowText(hStaticControl1,title2);
          break;

       case WM_RBUTTONDOWN :
          GetWindowText(hStaticControl1, title3, 28);
          SetWindowText(hStaticControl2,title3);
          break;

       case WM_DESTROY :
          PostQuitMessage(0);
          break;

       default :
          return DefWindowProc(hWnd,message,wParam,lParam);
    }
    return 0;
}

Şimdi fonksiyonumuzu adım adım inceleyelim. Pencere fonksiyonumuza parametre değişkeni olarak gelen hWnd tutamaç değeri, uygulamamızın ana penceresine aittir. Oluşturacağımız statik kontroller, bu ana pencere içerisinde olacağı için, kontrolleri oluştururken bu değeri kullanmamız gerekecektir. CreateWindow fonksiyonunda kullandığımız ID_STATIC_CONTROL1 ve ID_STATIC_CONTROL2 sembolik sabitleri, sırasıyla 100 ve 101 değerlerine tanımlanmış sabitlerdir. Bu değerler, kontroler oluşturulurken fonksiyonun menü parametresi yerine geçilecek değerlerdir.

Gördüğünüz gibi, statik kontrol oluşturmak için kullandığımız pencere sınıfı ’static’ ismine sahiptir. CreateWindow fonksiyonunun ikinci parametresi, oluşturularak pencerenin başlık yazısını belirtiyordu. Statik kontrol oluşturulurken ise bu parametre, statik kontrol üzerinde gösterilecek yazıyı belirtmektedir. Pencere özellikleri parametresi için, WS_CHILD sabitini kullanmamız zorunludur. Çünkü tüm standart kontroller, birer alt penceredir. Kontrolün ana penceresi olarak da, WinMain fonksiyonunda oluşturmuş olduğumuz ana pencerenin tutamaç değerini veriyoruz. Çünkü bu kontrollerin, ana pencere içerisinde görüntülenmesini istiyoruz. Fonksiyonun dördüncü ve beşinci parametreleri, ana pencerenin sol üst köşesi orijin olmak üzere, kontrolün ana pencere üzerindeki yerini belirtmektedir. Altıncı ve yedinci parametreler, kontrolün genişlik ve yükseklik değerlerini belirtmektedir. Pencere fonksiyonunda, WM_CREATE mesajı alınır alınmaz statik kontrollerimiz de belirtilen özelliklere sahip bir şekilde oluşturulacaktır.

Ana pencere fonksiyonunda farenin sol tuşuna ve sağ tuşuna basılma mesajları alınması durumlarında yaptığımız işlemler, oluşturulan statik kontrolün içerisindeki yazının değiştirilmesini, bu yazının alınarak diğer statik kontrolün yazısı olarak atanmasını sağlar. SetWindowText fonksiyonu, önceki yazılarımızdan da hatırlayacağınız üzere, tutamaç değeri kendisine parametre olarak geçilen pencerenin başlık yazısının değiştirilmesini sağlıyordu. Aynı şekilde GetWindowText fonksiyonu da, pencerenin başlık yazısını almamızı sağlıyordu. Kontroller de birer pencere olduğuna göre, pencereler için kullandığımız bu fonksiyonları, anlamlı oldukları durumlarda kontroller için de kullanabiliriz. Örneğin bir statik kontrol için pencere başlığı, statik kontrol içerisinde yazan yazıyı belirtmektedir. O halde bu fonksiyonları kullanarak statik kontrol içerisinde yazan bir yazıyı öğrenebilir veya değiştirilmesini sağlayabiliriz.

Farenin sol tuşuna basılmasıyla kuyruktan WM_LBUTTONDOWN mesajı alındığında ilk oluşturduğumuz statik kontrolün yazısını değiştiriyoruz. Bu amaçla SetWindowText fonksiyonuna, tutamaç değeri olarak hStaticControl1 değerini, yeni başlık yazısı değeri olarak da title2 isimli karakter katarını veriyoruz. Pencereve statik kontroller oluşturulduktan sonra farenin sol tuşuna tıklanmasıyla birinci statik kontrolümüzün içerisindeki yazı değişmiş olacaktır. Farenin sağ tuşuna basılmasıyla kuyruktan WM_RBUTTONDOWN mesajı alındığında ise, ilk statik kontrolümüzün başlık yazısını GetWindowText fonksiyonunu kullanarak alıyoruz ve ikinci statik kontrolüme SetWindowText fonksiyonunu kullanarak atıyoruz. GetWindowText fonksiyonunun ilk parametresi olarak ilk statik kontrolümüzün tutamaç değerini verdik. İkinci parametresi, alınan yazının saklanacağı adresi ve üçüncü parametresi de alınacak maksimum karakter sayısını belirtiyordu. Bu değerleri de verdikten sonra, birinci statik kontrolümüzün içerisindeki yazı, title3 adresinden itibaren yazılacaktır. Sonraki adımda da SetWindowText fonksiyonu ile, alınan bu yazının ikinci statik kontrole atanmasını sağladık. Uygulamanın çalışma anında farenin sağ tuşuna basılması durumunda her iki statik kontrolümüzün yazısı da aynı olacaktır :

Uygulamanın çalışan ilk hali :


Farenin sol tuşuna basılması :


Farenin sağ tuşuna basılması :


Statik Kontrole İlişkin Pencere Biçimleri :

Statik kontrolleri anlatırken, her kontrolün kendisine özel bazı pencere biçimleri olduğunu ve CreateWindow fonksiyonunun pencere biçimi parametresinde bu değerlerinde kullanılabileceğini söylemiştik. Statik kontrol için tanımlanan pencere biçimlerine ilişkin sembolik sabitlerin isimleri SS_ öneki ile başlar. Bu pencere biçimleri | operatörü ile birleştirilerek bir arada kullanılabilir. Şimdi bu sembolik sabitleri ve anlamlarını inceleyelim :

STATİK KONTROL PENCERE BİÇİMİ SEMBOLİK SABİT İSMİ
ANLAMI
SS_BITMAP Statik kontrol içerisinde bir bitmap dosyasının görüntüleneceğini belirtir. Başlık yazısı olarak, kullanılan kaynakta dosya yeri tanımlanmış olan bir dosya adı verilir. Bu pencere biçimi kullanıldığında, genişlik ve yükseklik parametreleri ihmal edilir ve bu değerler resim dosyası kontrole sığacak biçimde otomatik olarak ayarlanır.
SS_BLACKFRAME Kontrolün etrafına, pencere çerçevelerinin rengi ile aynı renkte bir çerçeve çizilmesini sağlar. Varsayılan pencere çerçevesi rengi siyahtır.
SS_BLACKRECT Kontrolün, pencere çerçevesinin rengine sahip içi dolu bir dikdörtgen biçiminde görüntülenmesini sağlar.
SS_CENTER Kontrolün içerisindeki yazının ortalanmasını sağlar.
SS_CENTERIMAGE Eğer statik kontrol içerisinde bir resim dosyasının içeriği görüntüleniyorsa ve bu resmin ebatları kontrolden daha küçük ise, boş kalan kısımlar resim dosyasının sol üst piksel rengi ile doldurulup doldurulmayacağını belirler.
SS_ENHMETAFILE Statik kontrol içerisinde bir matefile dosyasının görüntülenmesini sağlar.
SS_ETCHEDFRAME Kontrolün çerçevesinin EDGE_ETCHED kenar biçimine sahip bir biçimde çizilmesini sağlar.
SS_ETCHEDHORZ Kontrolün çerçevesinin alt ve üst kenarlarının EDGE_ETCHED kenar biçimine sahip bir biçimde çizilmesini sağlar.
SS_ETCHEDVERT Kontrolün çerçevesinin sol ve sağ kenarlarının EDGE_ETCHED kenar biçimine sahip bir biçimde çizilmesini sağlar.
SS_GRAYFRAME Kontrolün etrafına, arka plan rengi ile aynı renkte bir çerçeve çizilmesini sağlar. Varsayılan arka plan rengi gridir.
SS_GRAYRECT Kontrolün, arka plan rengine sahip içi dolu bir dikdörtgen biçiminde görüntülenmesini sağlar.
SS_ICON Statik kontrol içerisinde bir ikon dosyasının görüntüleneceğini belirtir. Başlık yazısı olarak, kullanılan kaynakta dosya yeri tanımlanmış olan bir dosya adı verilir. Bu pencere biçimi kullanıldığında, genişlik ve yükseklik parametreleri ihmal edilir ve bu değerler ikon kontrole sığacak biçimde otomatik olarak ayarlanır.
SS_LEFT Kontrolün içerisindeki yazının sola dayalı bir biçimde yazılmasını sağlar.
SS_LEFTNOWORDWRAP Kontrolün içerisindeki yazının sola dayalı bir biçimde yazılmasını sağlar. Yazının kontrole sığmayan kısımları için alt satıra geçilmez.
SS_NOPREFIX Kontrolün içerisindeki yazıda bulunan ampersand karakterlerinin (&) görüntülenmesi ile ilgili ayarlar yapar. Yazı içerisindeki ampersand karakterlerinin olduğu gibi gösterilmesini engeller; bunun yerine ampersand karakterinden bir sonra yer alan karakterinin altının çizili görüntülenmesini sağlar.
SS_NOTIFY Belirli olaylar gerçekleştiğinde kontrolün uygulamaya mesajlar göndermesini sağlar. Bu özellik eklenmezse, bu durumlar oluştuğunda kontrol bizi haberdar etmeyecektir. (Örneğin kontrolün üzerine tıklanması gibi)
SS_OWNERDRAW Statik kontrolün çiziminden, onun sahiplenici penceresinin sorumlu olmasını sağlar. Kontrolün yeniden çizilmesi gerektiği durumlarda, sahiplenici pencereye WM_DRAWITEM mesajı gönderilir.
SS_REALSIZEIMAGE Bitmap veya ikon görüntüleyen bir statik kontrolün, bitmap veya ikon dosyası yüklendiğinde veya kontrol çizildiğinde yeniden boyutlandırılmasını önler. Eğer bitmap’in veya ikon’un ebatları statik kontrolden daha büyükse sığmayan kısımlar kesilir.
SS_RIGHT Kontrolün içerisindeki yazının sağa hizalanmasını sağlar.
SS_RIGHTJUST Kontrolün sağ ve alt kenarlarının sabitlenmesini sağlar. Bitmap veya ikon dosyası yüklendiğinde sadece üst ve sol kenarların hizalanmasını sağlar.
SS_SIMPLE Yazının kontrol içerisinde tek bir satırda ve sola hizalanmış bir şekilde görüntülenmesini sağlar.
SS_SUNKEN Kontrolün sol ve üst kenarlarını gölgelendirir.
SS_WHITEFRAME Kontrolün etrafına, pencere arka plan rengi ile aynı renkte bir çerçeve çizilmesini sağlar. Varsayılan pencere arka plan rengi siyahtır.
SS_WHITERECT Kontrolün, pencere arka plan rengine sahip içi dolu bir dikdörtgen biçiminde görüntülenmesini sağlar.
Statik Kontrole Gönderilen Mesajlar

Statik kontrollere göndereceğimiz mesajlara ilişkin sembolik sabitler STM_ öneki kullanılarak isimlendirilmişlerdir. Bu mesajlar ve anlamlarını inceleyelim :

STATİK KONTROLE GÖNDERİLEN MESAJLAR
ANLAMI
STM_GETIMAGE Bir statik kontrol içerisinde görüntülenen görüntünün tutamaç değerini almak için uygulama tarafından statik kontrole gönderilen mesajdır. Bu mesajın wParam parametresi görüntü türünü belirtir, lParam parametresi ise kullanılmaz ve sıfır olarak geçilebilir. wParam parametresinin değeri, IMAGE_BITMAP, IMAGE_CURSOR, IMAGE_ENHMETAFILE ve IMAGE_ICON değerlerinden birisi olabilir. Bu mesaj kontrole gönderildiğinde bize geri döndürülecek olan değer, ilgili görüntünün tutamaç değeridir.
STM_SETIMAGE Bir statik kontrol içerisinde görüntülenen görüntünün yeni bir görüntü ile değiştirilmesi amacıyla uygulama tarafından statik kontrole gönderilen mesajdır. Bu mesajın wParam parametresi görüntü türünü, lParam parametresi ise görüntünün tutamaç değerini belirtir. wParam parametresinin değeri, IMAGE_BITMAP, IMAGE_CURSOR, IMAGE_ENHMETAFILE ve IMAGE_ICON değerlerinden birisi olabilir. Bu mesaj kontrole gönderildiğinde bize geri döndürülecek olan değer, kontrolde önceden görüntülenen görüntüye ilişkin tutamaç değeridir.
STM_GETICON İkon görüntüleyen bir statik kontrol için, bu ikona ilişkin tutamaç değerinin elde edilmesi amacıyla gönderilir. wParam ve lParam parametreleri kullanılmaz, sıfır geçilir. Eğer kontrolde hiçbir ikon görüntülenmiyorsa NULL değer döndürür, aksi takdirde görüntülenen ikonun tutamaç değerini döndürür.
STM_SETICON İkon görüntüleyebilecek biçimde oluşturulmuş bir statik kontrol için, bir ikonun görüntülenmesini sağlamak amacıyla gönderilir. . wParam parametresi görüntülenecek ikona ilişkin tutamaç değerini belirtir, lParam parametresi kullanılmaz, sıfır geçilir. Eğer kontrolde daha önceden bir ikon görüntüleniyorsa fonksiyon bu ikonun tutamaç değerini döndürür.
WM_CTLCOLORSTATIC Bu mesaj statik kontrolün yeniden çizilmesi gerektiği durumlarda, kontrolün ana penceresine gönderilir. wParam parametresi olarak görüntüleme bağlamının (Display Context - DC) tutamaç değeri, lParam parametresi olarak statik kontrolün tutamaç değeri verilir.
Statik Kontrolün Uygulamaya Gönderdiği Mesajlar

Statik kontrolün uygulamalara göndereceği mesajları, STN_ öneki kullanılarak isimlendirilmiştir. Kontrol tarafından bu mesajların gönderilmesini sağlamak için kontrolü oluştururken SS_NOTIFY pencere biçimini kullanmamız gereklidir. Şimdi bu mesajları ve anlamlarını inceleyelim :

STATİK KONTROLÜN GÖNDERDİĞİ MESAJLAR
ANLAMI
STN_CLICKED Kullanıcı tarafından statik kontrol üzerine tıklandığı zaman, kontrolün ana penceresine gönderilir. Bu mesaj kullanılarak, LOWORD makrosu ile statik kontrolün tanımlayıcı değeri, HIWORD makrosu kullanılarak statik kontrolün tutamaç değeri elde edilebilir.
STN_DBLCLK Kullanıcı tarafından statik kontrol üzerine çift tıklandığı zaman, kontrolün ana penceresine gönderilir. Bu mesaj kullanılarak, LOWORD makrosu ile statik kontrolün tanımlayıcı değeri, HIWORD makrosu kullanılarak statik kontrolün tutamaç değeri elde edilebilir.
STN_DISABLE Statik kontrol pasif duruma (disabled) getirildiği zaman, kontrolün ana penceresine gönderilir. Bu mesaj kullanılarak, LOWORD makrosu ile statik kontrolün tanımlayıcı değeri, HIWORD makrosu kullanılarak statik kontrolün tutamaç değeri elde edilebilir.
STN_ENABLE Statik kontrol etkin duruma (enabled) getirildiği zaman, kontrolün ana penceresine gönderilir. Bu mesaj kullanılarak, LOWORD makrosu ile statik kontrolün tanımlayıcı değeri, HIWORD makrosu kullanılarak statik kontrolün tutamaç değeri elde edilebilir.
Bu yazımızda standart kontrollerin ne anlama geldiğini, nasıl kullanıldıklarını genel anlamıyla inceledik. En basit kontrollerden birisi olan statik kontrolü ayrıntılı bir şekilde ele aldık ve örneklendirdik. Önümüzdeki yazılarda standart kontrolleri incelemeye devam edeceğiz. Herkese mutlu günler dilerim.

Uygulamaya ilişkin kaynak kod dosyasını buradan indirebilirsiniz. (Örnek uygulama Visual Studio .Net 2003’te hazırlanmıştır.)

KAYNAKLAR

  • Win32 Programlama Yardım Sayfaları
Makale:
Windows API - Standart Kontroller ve Statik Kontrol 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