Visual C++ Nesneleri (BÖLÜM 2)

19 Tem

Nesne Temelli Program Yazmak

 

Nesne temelli programlama (OOP), standart yapılı programlama tekniklerinin uzantısı olarak düşünülebilir. Class (sınıf), dosya ve işleve eklenen, modülasyonun yeni öğesidir. OOP, yazılım nesneleriyle gerçek nesnelerin (şekiller, cihazlar, pencereler, belgeler) modellerini yaptığınız bir programlama stilidir. C gibi geleneksel programlama dilleriyle bile OOP yapmak olasıdır, ancak C++, OOP için doğrudan destek sağlar ve nesneler açısından düşünmeyi ve kodlamayı çok daha kolay ve doğal hale getirir.

 

OOP’yi daha çok ya da az kapsamlı kullanabilirsiniz. Örneğin, diğer türlü C’ye aşırı benzeyen bir programda tek yeni veri tipi sağlamak için kullanabilirsiniz. Ya da, çözmeye çalıştığınız problemin tümünü modellemek için nesne yönelimli tasarım kullanabilirsiniz. Örneğin MFC, Windows uygulamalarının modelini yapar ve pencereleri, belgeleri, iletişim kutularını, düğmeleri ve hatta uygulamayı tüm olarak simgelemek için sınıf nesnelerini sık sık kullanır.

 

Nesne yönelimli tasarım işlemi, problemin dikkatle belirlenmesiyle başlar. Bir sonraki adım, iyi nesneler yapabilecek öğeler için problemi incelemektir. Tasarım sürdükçe, yavaş yavaş bu nesnelerin yapısını ve davranışlarını geliştirirsiniz. Sonuç olarak, sıradüzendeki C++ sınıflarının yaptığı sıklıkta, nesneleri gerçekleştirirsiniz.

 

SDI ve MDI Uygulamaları

 

İki temel Doküman/Görünüm program tipi vardır.

 

·        SDI (Single Document Interface – Tek Dokümanlı Arabirim)

·        MDI (Multiple Document Interface – Çok Dokümanlı Arabirim)

 

Bir SDI programı tek bir doküman destekler ve hemen tek bir görünümü destekler. Bir anda tek bir görünümü destekler. Bir anda tek bir doküman açık olabilir. Bir SDI uygulaması belli bir göreve odaklanır.

 

            Bir MDI programında çeşitli farklı doküman tipleri kullanılabilir ve bu dokümanların her biri bir veya daha fazla görünüme sahip olabilir. Bir anda birden fazla doküman açık olabilir ve açık olan doküman o dokümanın ihtiyaçlarına uygun özelleştirilmiş bir araç çubuğu ve menüler kullanılır.

İletişim Kutusu Nedir?

 

İletişim kutusu, kullanıcıya geri besleme sağlamak veya kullanıcıdan giriş almak için kullanılan özelleştirilmiş pencerelerdir. İletişim kutuları tek satırlık mesajlar veren basit mesaj kutularından karmaşık kontroller içeren iletişim kutularına kadar değişik biçim ve büyüklükte olabilirler.

 

Ayrıca iletişim kutuları, bir program başlatılırken telif ve başlangıç bilgilerini görüntülemek amacıyla kullanıcı ile tek taraflı iletişim içinde kullanılır. Developer Studio ve Microsoft Word programlarının açılış ekranları tek taraflı iletişim için kullanılan iletişim kutularına iki örnektir. İletişim kutuları bazen kullanıcıya uzun süren bir işlemin ilerleyişi hakkında bilgi  vermek içinde kullanılır.

            Çeşitli farklı tipte iletişim kutuları vardır ve her biri özel bir amaca sahiptir. İki ana iletişim kutusu tipi vardır.

 

·        Modal (Kipli) iletişim kutuları

·        Modeless (Kipsiz) iletişim kutuları

 

Modal İletişim Kutusu: En yaygın kullanılan iletişim kutusu tipi modal iletişim kutusudur. Modal iletişim kutusu açıkken kullanıcı programda herhangi başka bir işlem yapamaz, önce bu iletişim kutusuyla işini bitirmelidir.

 

            Modeless İletişim Kutusu: Modeless iletişim kutusu açıkken programda başka işlemler yapılabilir. Modeless iletişim kutusuna bir örnek Developer Studio’nun kullanıldığı Find and Replace iletişim kutusudur. İletişim kutusu açıkken ana menüden seçim yapabilir ve hatta başka iletişim kutuları açabilirsiniz. Bunu dışındaki diğer tüm Developer Studio iletişim kutları modaldır. Bunlar açık olduğu sürece kullanıcı Developer Studio’nun diğer kısımlarıyla etkileşimde bulunamaz.

 

Giriş İçin İletişim Kutularını Kullanmak

 

            Çoğu insan iletişim kutlarını düşündüklerinde kullanıcıdan bilgi girişi alan iletişim kutularını düşünürler. İletişim kutuları çoğunlukla kullanıcı girişleri ile ilgili kontroller içerirler. Bir iletişim kutusuna çeşitli kontroller ekleyebilirsiniz.

 

            Bazı iletişim kutularının kullanılması Windows programlarında o kadar sık gerekli olur ki bunlar iletişim sisteminin bir parçası olarak içermektedir. Genel iletişim kutuları (Common Dialog Boxes) olarak bilinen bu iletişim kutuları bir fonksiyon çağırma yoluyla kullanılabilirler ve sizin bir iletişim kutusu kaynağı yaratmanız gerekmektedir. Dosya açma, seçme, yazı tipi ve renk seçme ve kelime bulup değiştirme işlemleri için genel iletişim kutuları vardır.

 

Mesaj Kutuları Eklemek

 

            En basit iletişim kutusu tipi bilgi görüntülemek için kullanılan mesaj kutusudur. Bu iletişim kutusu tipi o kadar basittir ki MFC sınıf kütüphanesini kullanarak tek satırlı bir kodla iletişim kutusunu yaratabilirsiniz. Örneğin, parametrelerin MFC’nin sağladığı öndeğerleri ile bir mesaj kutusu göstermek için şu satırı kullanmanız yeterlidir.

 

            AfxMessageBox(“Merhaba!”);

 

            Bu kod satırı sarı bir üçgen içinde ünlem işareti olan bir mesaj kutusu yaratır. En az tek bir parametre kullanmanız gerekir: Bu, iletişim kutusu içinde görüntülenen mesajdır. Seçime bağlı olarak bir ikon stili ve düğme düzeni de seçebilirsiniz. Aşağıdaki tabloda düğme düzenlerine ait parametre değerleri gösterilmektedir

 

Kullanılan İkon

Anlamı

Mesaj Kutusu Biçimi

Ünlem “!” işareti

Warning (Uyarı)

MB_ICONEXCLAMATION

Daire içindeki “i” işareti

Information (Bilgi)

MB_ICONINFORMATION

Soru “?” işareti

Question (Soru)

MB_ICONQUESTION

Daire içindeki “x” işareti

Error (Hata)

MB_ICONSTOP

            Tablo 2.1 Mesaj Kutusu İkonları

 

Ayrıca mesaj kutusunda kullanılabilecek bir düğme düzenlemesi de belirleyebilirsiniz. Ön değer olarak mesaj kutusunda OK etiketli tek bir düğme vardır. Ancak bazen kullanıcıya basit bir soru sorup cevabını almak gerekebilir. Bu düğme düzenlemelerinin bir kullanımı, bir hata sırasında kullanıcıya ne yapılması gerektiğini sormaktır. Örneğin, aşağıdaki kod soru işareti ikonu içeren ve kullanıcıya mevcut dosyasının silinmesinin istenip istenmediğini soran bir mesaj kutusu görüntüler.

 

                int nGeriDonenDeger = AfxMessageBox(“Varolan dosyanın üzerine kaydetmek istediğinizden eminmisiniz?”, MN_YESNOCANCEL | MB_ICONQUESTION);

if (nGeriDonenDeger == IDYES)

{//Dosyanın Üzerine Kaydet}

 

            Yukarıda verilen kod programda kullanıldığında kullanıcı Yes, No ve Cancel düğmelerinden birini seçebilir. Aşağıdaki tablo bir mesaj kutusunda bulunabilecek düğme düzenlerini göstermektedir.

 

Mesaj Kutusu Biçimi

Kullanılan Düğmeler

MB_ABORTRETRYIGNORE

Abort, Retry ve Ignore

MB_OK

OK

MB_OKCANCEL

OK ve Cancel

MB_RETRYCANCEL

Retry ve Cancel

MB_YESNO

Yes ve No

MB_YESNOCANCEL

Yes, No ve Cancel

            Tablo 2.2 Mesaj Kutusu Düğmeleri

 

            Mesaj kutusunun döndürdüğü değer kullanıcının hangi düğmeye tıkladığını gösterir. Aşağıdaki tabloda döndürülecek değerler ve tıklanılan düğme karşılaştırması gösterilmiştir.

 

Döndürülen Değer

Basılan Düğme

IDABORT

Abort

IDCANCEL

Cancel

IDIGNORE

Ignore

IDNO

No

IDOK

OK

IDRETRY

Retry

IDYES

Yes

            Tablo 2.3 Mesaj Kutusu Düğmelerinden Dönen Değerler

Bir İletişim Kutusu Eklemek

 

            Bir programa bir iletişim kutusu eklemek için genelde dört adım gereklidir.

 

·        Developer Studio kaynak araçlarını kullanarak iletişim kutusu kaynağı tasarlayın ve yaratın.

·        CDialog sınıfından türetilmiş ve iletişim kutusunu yönetecek bir C++ sınıfı yaratmak için Class Wizard’ı kullanın.

·        Gerekirse iletişim kutusuna gönderilecek mesajlar üzerinde iletişim yapmak için fonksiyonlar ekleyin.

·        İletişim kutusu ana menüden seçilirse menü kaynağı üzerinde değişiklik yapılmalı ve Class Wizard kullanılarak mesaj fonksiyonları yaratılmaktadır.

 

Kaynakları Anlama

 

            İletişim kutuları özelleştirilmiş pencere tipleridir. Ancak, yaygın olarak kısa süreliğine kullanıldıklarından genellikle program kaynağı olarak saklanır ve yalnızca gerektiğinde yüklenirler. Bunu, az miktarda serbest belleği olan bir makinede bir Windows programı çalıştırdığında gerekebilirsiniz. Her iletişim kutusu açıldığında EXE dosyadan iletişim kutusu kaynaklarını yüklemek için sabit diske erişim yapılır.

 

Bir İletişim Kutusu Kaynağı Yaratmak

 

            Developer Studio bir iletişim kutusunu görsel olarak yaratmanıza ve düzenlemenize olanak sağlar. Fareye kullanarak kontroller ekleyebilir ve  büyüklüklerini değiştirebilirsiniz. Bir fare düğmesine tıklamayla iletişim kutusunun ve kontrollerinin özelliklerini ayarlayabilirsiniz.

 

            Aşağıdaki adımları izlemeden önce bir MFC App Wizard’ı kullanarak bir SDI projesi oluşturun.

 

·        Insert menüsünden Resource komutunu seçerek New Resource iletişim kutusunu görüntüleyin. Sonra kaynak tipi olarak Dialog seçin ve OK’e tıklayın.

·        Resource ağacından Dialog klasörüne farenin sağ tuşu ile tıklayın ve açılan menüden Insert Dialog komutunu seçin.

 

İlk başta görüntülenen iletişim kutusu, biri OK etiketli diğeri Cancel etiketli iki düğme kontrolü içerir. MFC sınıf kütüphanesi genellikle bu kontrollerin işleyişiyle ilgilidir. Biz bu iletişim kutusuna istediğimiz kontrolleri ekleyip istediklerimizi çıkartabiliriz.

 

İletişim Kutusunun Özelliklerini Değiştirmek

 

            Her iletişim kutusu, farenin sağ tuşuyla tıklayarak ve açılan menüden Properties komutunu seçerek görüntüleyebileceğiniz özelliklere sahiptir. General sekmesinin altındaki iletişim kutusu özellikleri şunlardır:

 

            ID: Normalde IDD_DIALOG1 gibi bir şeydir. İletişim kutularını IDD_ ile başlayan bir tanımlayıcı ile isimlendirmek bir MFC standardıdır. Siz iletişim kutularınıza daha anlamlı isimler verebilirsiniz: Bu iletişim kutusuna IDD_MERHABA adını verin.

 

            Caption: Normalde dialog düğmelerine sahiptir. Bunu da daha anlamlı bir başlıkla değiştirmelisiniz. Bu örnek iletişim kutusuna Merhaba başlığını verebilirsiniz.

 

            Menü: Normalde seçili değildir çünkü iletişim kutularının çoğu menü kullanmaz.

 

            X Pos: Normalde iletişim kutusunun varsayılan konumunu kullanmak için seçili değildir.

 

 

            Y Pos: Normalde iletişim kutusunun varsayılan konumunu kullanmak için seçili değildir.

 

            Font Name: İletişim kutusunun o anda kullandığı yazı tipinin ismini içerir.

 

            Font Size: İletişim kutusunun o anda kullandığı yazı tipinin büyüklüğünü içerir.

 

Styles sekmesinin altındaki iletişim kutusu özellikleri şunlardır.

 

            Style: Genelde çoğu iletişim kutusu Popup düğmesine sahiptir. Form görünümlerinde veya iletişim çubuklarında kullanılan özel iletişim kutusu şablonları söz konusu olduğunda stil Child olarak belirlenir.

 

            Border: Çoğu iletişim kutusu için Dialog Frame değerine sahiptir.

 

            Minimize Box: İletişim kutusu için simge durumuna küçültme (minimize) düğmesi yaratır. Bu onay kutusu bir çok iletişim kutusu için seçilmemiş durumdadır bu sayede iletişim kutusunda minimize etme düğmesi bulunmaz.

 

            Maximize Box: İletişim kutusu için maximize etme (ekranı kapla) düğmesi yaratır. Bu onay kutusu bir çok iletişim kutusu için seçilmemiş durumdadır, bu sayede iletişim kutusunda maksimize etme düğmesi bulunmaz.

 

            Title Bar: İletişim kutusu için bir başlı çubuğu yaratır. Bu onay kutusu hemen her zaman işaretlidir. Çünkü iletişim kutularının çoğu başlık çubuğuna sahiptir.

 

            System Menu: İletişi kutusu için system menüsünün sağlanması gerektiğini belirtir. Bu onay kutusu normalde işaretli durumdadır.

 

            Horizontal Scroll: İletişim kutusu için yatay kaydırma çubuğu yaratmak amacıyla kullanılır. Bu onay kutusu hemen her zaman seçilmemiş durumdadır çünkü iletişim kutuları çok nadir olarak kaydırma çubuğu kullanırlar.

 

            Vetical Scroll: İletişim kutusu için düşey kaydırma çubuğu yaratmak amacıyla kullanılır. Yatay kaydırma çubuğu gibi bu özellik de çok nadir kullanılır.

 

            Clip Siblings: Sadece çocuk pencerelerinde kullanılır.

 

            Clip Children: Ana pencereler için kullanılır çoğu iletişim kutusu için bu onay kutusu seçilmemiş durumdadır.

 

            More Styles sekmesi iletişim kutusu için ilave özellikler içerir.

 

System Modal: Modal bir iletişim kutusu yaratır. Bu seçenek seçilirse kullanıcı başka bir programa geçemez.

 

Absolute Align: İletişim kutusu ilk görüntülendiğinde nereye yerleştirileceğini belirtmek için kullanılır. Onay kutusu seçilirse, iletişim kutusu ana pencere yerine ekrana göre hizalanır.

 

            No Idle Message: İletişim kutusunun mesaj kuyruğu boşken belli bir pencere mesajının, WM_ENTERIDLE mesajının gönderilmesine engel olur. Bu onay kutusu normalde seçilmemiş durumdadır.

 

            Local Edit: Bir düzeltme kontrolü belleğinin nasıl tahsis edileceğini belirtmek için kullanılır. Bu onay kutusu normal olarak seçilmemiş durumdadır. Bu durumda düzeltme kontrolleri programın veri bölümleri dışındaki belleği kullanır.

 

            Visible: İletişim kutusu ilk görüntülendiğinde görünür olmasını belirtmek için kullanılır. Bu onay kutusu normalde işaretli durumdadır. Form görünümlerinde bu onay kutusu seçili değildir.

 

            Disabled: İletişim kutusu ilk görüntülendiğinde kullanılamaz durumda olmasını sağlamak içindir. Bu onay kutusu normalde işaretsiz durumdadır.

 

            3D-Look: İletişim kutusuna üç-boyutlu bir görünüm verir. Bu onay kutusu normalde işaretsiz durumdadır.

 

            Set Foreground: İletişim kutusunun ön plana yerleştirilmesini sağlar bu onay kutusu normalde işaretsiz durumdadır.

 

            No Fail Create: Bir hata olsa bile Windows’a iletişim kutusunu yaratmasını söyler. Bu onay kutusu normalde işaretsiz durumdadır.

 

            Control: Bir çocuk kontrolü olarak kullanılabilecek bir iletişim kutusu kaynağı yaratır. Bu onay kutusu normalde işaretsiz durumdadır.

 

            Center: İletişim kutusu ilk görüntülendiğinde ortada görüntülenmesini sağlar. Bu onay kutusu normalde işaretsiz durumdadır.

 

            Center Mouse: Fare imleci iletişim kutusunun ortasına konumlandırır. Bu onay kutusu normalde işaretsiz durumdadır.

 

            Context Help: Ortama duyarlı yardım için araç çubuğuna bir soru işareti ikonu ekler. Bu onay kutusu normalde işaretsiz durumdadır.

 

İletişim Kutusuna Kontrol Eklemek

 

            İletişim kutusuna ekleyebileceğiniz basit bir kontrol statik düzenleme kontrolüdür. Statik düzenleme kontrolü iletişim kutusu ile etkileşim gerektirmez. Genellikle iletişim kutusunun içerdiği diğer kontroller için düz metin etiketi olarak kullanılır. Statik düzenleme kontrolü eklemek için şu adımları izleyin.

 

·        Kontrol araç çubuğundan Static Text kontrolünü seçin. İletişim kutusu üzerinde hareket edildiğinde imleç artı işaretine dönüşür.

·        İmleci iletişim kutusunun ortasına getirin ve sol tuşla tıklayın. Statik bir düzenleme kontrolü yaratılır ve kontrol Static etiketini içerir.

·        Statik düzenleme kontrolünün etiketini değiştirmek için kontrole farenin sağ tuşuyla tıklayın ve kısayol menüsünden Properties komutunu seçin, başlığı Merhaba olarak değiştirin.

İletişim görüntülendiğinde statik düzenleme kontrolü görünür haldedir. Düzenleme kontrolleri, kontrollere etiket vermek veya değişmesi pek muhtemel olmayan mesajları görüntülemek için mükemmel bir seçimdir. Düzenleme kontrolünün kenarlarını fare ile sürükleyerek kontrolün büyüklüğünü ve konumunu değiştirmeyi deneyin.

 

İletişim Kutusu İçin Sınıf Yaratmak

 

            Programınızda iletişim kutusu ile etkileşimlerin çoğunu idare etmek için CDialog sınıfını kullanabilirsiniz. CDialog  sınıfı iletişim kutusunu kullanmayı kolaylaştıran üye fonksiyonları içerir. Özellikle sizin yarattığınız iletişim kutusu için CDialog sınıfından bir sınıf üretmek için ClassWizard’ı kullanmalısınız.

 

ClassWizard’ı başlatmak için şu metotlardan herhangi birini kullanın:

 

·        Developer Studio’da CTRL+W tuşlarına basın.

·        View menüsünden ClassWizaerd’ı seçin.

·        İletişim kutusunu editöründe herhangi bir yere farenin sağ tuşuyla tıklayın ve açılan menüden ClassWizard’ı seçin.

 

ClassWizard IDD_MERHABA gibi yeni bir kaynağın eklendiğini bilirse, bir iletişim kutusu yeni kutusu kaynağı için iki seçenek arasında bir seçim yapmanızı ister. Bu iki seçenek:

 

·        Yeni bir sınıf yaratmanız ya da

·        Mevcut bir sınıfı seçmenizdir.

 

ClassWizard, yeni iletişim kutusu kaynağını yönetecek bir sınıf yaratmak için New Class iletişim kutusunda girdiğiniz değerleri kullanır. IDD_MERHABA iletişim kutusuna ait değerleri girmek için aşağıdaki tablodaki değerleri kullanın.

 

Kontrol

Değer

Name

CMerhabaDlg

File Name

MerhabaDlg.cpp

Base Class

CDialog

Dialog ID

IDD_MERHABA

Automation

None

 

            OK düğmesine tıklayın. CMerhabaDlg sınıfı üretilecek ve projenize iki dosya eklenecektir:

 

·        MerhabaDlg.h dosyası sınıf bildirimini içerir.

·        MerhabaDlg.cpp dosyası sınıf tanımını içerir

 

İletişim Kutusuna İlk Değerler Vermek İçin Bir Mesaj Yöneticisi Yaratmak

 

            İletişim kutusundaki tüm kontroller yaratıldığında işletim sistemi iletişim kutusuna WM_INITDIALOG mesajını gönderir. Çoğu iletişim kutusu, gerekli her tür ilk değer verme işlemini gerçekleştirmek için WM_INITDIALOG mesajını kullanır. CMerhabaDlg sınıfını projenize ekledikten sonra, WM_INITDIALOG gibi mesajlar için bir fonksiyon eklemek amacıyla ClassWizard’ı kullanabilirsiniz. WM_INITDIALOG için bir mesaj yöneticisi eklemek üzere şu adımları izleyin:

 

·        CTRL+W tuşlarına basarak veya bir kaynak kod penceresinde farenin sağ tuşuyla tıklayıp menüden ClassWizard’ı seçerek ClassWizard’ı açın.

·        Message Maps sekmesini seçtikten sonra Class Name listesinden mesajla ilgili işlem yapacak olan sınıfı (bu örnekte, CMerhabaDlg sınıfını) seçin.

·        Object ID liste kutusundan mesajı üreten nesneyi (bu örnekte CMerhabaDlg nesnesini) seçin. Messages liste kutusuna gönderilen mesajların listesi görüntülenecektir.

·        Messages liste kutusundan WM_INITDIALOG mesajını seçin ve Add Function düğmesine tıklayın. ClassWizard CMerhabaDlg sınıfına otomatik olarak OnInitDialog fonksiyonunu ekleyecektir.

·        ClassWizard’ı kapatmak için OK düğmesine tıklayın.

 

CMerhabaDlg::OnInitDialog fonksiyonunun aslında değişkenlere ilk değer vermesi gerekmez. Bunun yerine bir mesaj kutusu görüntüleyebilirsiniz. OnInitDialog fonksiyonunu aşağıdaki kod gibi değiştirin.

 

                BOOL CMerhabaDlg::OnInitDialog()

                {

                               CDialog::OnInitDialog();

                               AfxMessageBox(“Merhaba iletişim kutusu açılacak!”);

                               return TRUE;

                }

 

Yeni İletişim Kutusu İçin Menü Seçeneği Eklemek

 

            Projeniz tarafından kullanılan menüye bir menü maddesi eklemek için bu kısımdaki adımları izleyin. Menüler projenizde kaynaklar olarak saklanır. O anki menü kaynaklarını görüntülemek için proje çalışma alanı penceresinde ResourceView sekmesini seçin. Kaynak ağacını o anki proje için tanımlanmış farklı kaynak tiplerini gösterecek şekilde genişletin; klasörlerden birisi Menu adındadır.

 

            IDR_MAINFRAME adlı tek menüyü görmek için Menu klasörünü açın. Menükaynak ikonuna çift tıklayarak menü kaynağını açın. Menü düzeltilmeye hazır biçimde kaynak editöründe görüntülenir. Üst seviyeli bir menü maddesine tıklamak o madde ile ilişkilendirilmiş açılan menüyü görüntüler.

 

            Her menünün son maddesi menü kaynağına yeni menü maddeleri eklmek için kullanılan boş bir kutudur. Bütün menü maddeleri ilk önce bir menü kaynağının sonuna eklenilir ve sonra doğru konumlarına taşınır. Yeni bir menü maddesi eklemek için şu adımları izleyin:

 

·        Menü Properties iletişim kutusunu görüntülemek için File menüsündeki boş kutuya çift tıklayın.

·        Bir menü maddesi eklemek için bir menü ID ve başlık girin. Bu örnek için menü ID olarak ID_FILE_MERHABA ve menü başlığı olarak &Merhaba girin.

·        Editöre geri dönmek için Menu Properties iletişim kutusunun dışında herhangi bir yere tıklayın.

 

Bir menü maddesi ekledikten sonra bir sonraki adım yeni menü maddesi ile ilgili mesaj yöneticisi fonksiyonunu eklemektir. ID_FILE_MERHABA menü maddesi için bir mesaj yöneticisi fonksiyonu eklemek üzere şu adımları izleyin:

 

·        CTRL+W tuşlarına basarak ve ya kaynak kod penceresinde farenin sağ tuşu ile tıklayıp menüden ClassWizard’ı seçerek ClassWizard’ı açın.

·        Message Maps adlı sekmeyi seçin ve mesajla ilgilenecek sınıfı (bu örnekte CMainFrame sınıfını) seçin.

·        Object ID liste kutusundan mesajı üreten nesneyi (bu önekte ID_FILE_MERHABA) seçin. Messages liste kutusunda iki tane mesaj yöneticisi fonksiyonu görüntülenir.

·        Messages liste kutusundan COMMAND mesajını seçin ve Add Function düğmesine tıklayın. Fonksiyon adı olarak ClassWizard’ın önerdiği OnFileMerhaba ismini kabul edin.

·        ClassWizard’ı kapatmak için OK düğmesine tıklayın.

 

CmainFrame::OnFileMerhaba fonksiyonunu aşağıdaki gibi değiştirin.

 

                Void CmainFrame::OnFileMerhaba()

                {

                               ChelloDlg dlgMerhaba;

                               if (dlgMerhaba.DoModal()==IDOK)

                                               AfxMessageBox(“OK Butonuna Tıklandı!”);

                               Else //IDCANCEL

                                               AfxMessageBox(“Cancel Butonu Tıklandı!”);

                }

 

MainFrm.cpp dosyasına MerhabaDlg.h dosyasında bulunan CMerhabaDlg sınıfının tanımını dahil etmek için MainFrm.h dosyasını dahil eden include deyiminin hemen üzerine aşağıdaki satırı ekleyin.

 

                #include “MerhabaDlg.h”

 

            Projenizi çalıştırın. DoModal üye fonksiyonu çağırıldığında IDD_MERHABA iletişim kutusu görüntülenir. İletişim kutusunun düğmelerinden birine basarak kutuyu kapatmadan fonksiyon sonlanmaz. OK düğmesine basarsanız döndürülen değer IDOK’dir. Cancel düğmesine basarsanız döndürülen değer IDCANCEL’dır.

Düğme Kontrolleri

 

Düğme Nedir?

 

            Düğme genellikle bir iletişim kutusunda, araç çubuğunda veya kontroller içeren diğer pencerelerde bulunan, yazı veya bitmap bir etiket içeren özel bir pencere tipidir. Windows’da beş tip düğme vardır.

 

Basılır Düğme: Hemen hemen bütün iletişim kutuları kullanıcının gerçekleştirebileceği bir işlemi belirtmek için en az bir basılır düğme (pushbutton) içerir. Bunlar yaygın olarak bir iletişim kutusunu kapatmak, bir arama işlemini başlatmak veya yardım istemek için kullanılır.

 

            Radyo Düğmesi: Birden fazla seçenek arasından sadece birinin seçilmesi gerektiği durumlarda (örneğin kullanıcı cinsiyet seçimi yapacağında) radyo düğmeleri (radio button) kullanılır. Çoğunlukla bir arada gruplanmış olan radyo düğmelerinden belli bir anda yalnızca birisi seçilebilir.

 

            Onay Kutusu: Onay kutuları (check box) beli bir koşulun True (doğru) ya da False (yanlış) olduğunu belirtmek için Boolean göstergeleri olarak kullanılır. Radyo düğmelerinden farklı olarak, bir gruptaki çok sayıda onay kutusu seçilebilir. Seçime bağlı olarak onay kutuları üçüncü bir durumu da destekler. Bu, kontrolün ne True ne de False olduğunu gösteren, onay kutusunun kullanılmaz olduğu durumdur.

 

            Grup Kutusu: Bir grup kutusu (group box) benzer amaçlar için kullanılan kontrolleri mantıksal olarak gruplar. Bu sayede kullanıcı kontroller arasındaki ilişkiyi kolaylıkla anlayabilir ve iletişim kutusunun kullanımı kolaylaşır. Radyo düğmeleri hemen her zaman bir grup kutusu içinde yer alır, böylece hangi kontrollerin birbirleriyle ilişkili olduğu anlaşılır.

Düğmeler İçin MFC Desteği

 

            Düğme kontrolleri normalde bir iletişim kutusunun parçası olarak yaratılır. Bir iletişim kutusuna bir düğme ekledikten sonra düğmeye basıldığında ve ya düğme seçildiğinde yaratılan olaylar karşısında ne yapılacağını belirleyen fonksiyonları eklemek için ClassWizard’ı kullanabilirsiniz. Ayrıca düğme kontrolleriyle ilişkili CButton nesnelerini yaratmak için ClassWizard’ı kullanabilirsiniz.

 

            Hem bir iletişim kutusu kaynağına eklenen düğmelerle hem de dinamik olarak yaratılan düğmelerle etkileşim için MFC CButton sınıfını kullanabilirsiniz. Bir düğme kontrolünü belli bir CButton nesnesiyle ilişkilendirmek için ClassWizard’ı kullanın.

 

Düğme Kontrollerinin Özellikleri

 

            Bütün kontroller gibi düğmelerde her kontrolün davranışını tamamlayan bir özellikler kümesine sahiptir. Beş farklı düğme kontrolü tipi olmasına rağmen bunlar ortak özelliklere sahiptir. Belli bir kontrolün özelliklerini görüntülemek için kontrolü farenin sağ tuşuyla tıkladığınızda çıkan menüden Properties komutunu seçebilirsiniz. Düğme kontrolü aşağıdaki özelliklere sahiptir.

 

            ID: Düğmenin kaynak ID’si Developer Studio IDC_BUTTON1 gibi varsayılan bir kaynak ID’si verir. Kontrollerin kaynak ID’si olarak IDC_önekini kullanmak Microsoft’un bir isimlendirme standardıdır.

 

            Caption: Düğmenin etiketi olarak gözüken yazıyı belirtir. Developer Studio, Button gibi sayılan bir değerdir. Düğmeyi, bu başlıktaki harflerden birine basarak klavyeden aktive etmek için o harfin başına & karakterini ekleyin.

 

            Visible: Düğmenin başlangıçta görünür olup olmayacağını belirler. Bu onay kutusu normalde işaretli durumdadır.

 

            Disabled: Düğmenin başlangıçta kullanılmaz durumda olacağını gösterir. Bu onay kutusu normalde işaretsiz durumdadır.

 

            Group: Bir gruptaki ilk kontrolü işaretler. Bu onay kutusu işaretlenemezse, bu özelliğe sahip bir kontrolü eden kontroller aynı grubun parçası olarak kabul edilir. Kullanıcı ok tuşlarını kullanarak aynı group içindeki kontroller arasında gezinebilir.

 

            Tab Stop: Bu kontrole klavyedeki Tab tuşuna basılarak erişilebileceğini gösterir. Bu onay kutusu normalde seçilmemiştir.

 

            Default Button: Bu kontrol iletişim kutusuna varsayılan düğmesi olarak belirler. Bir iletişim kutusunda yalnızca bir tane varsayılan düğme olabilir ve iletişim kutusunda herhangi başka bir kontrol kullanmadan Enter’a basılarak bu düğme çalıştırılabilir. Bu özellik yalnızca basılır düğme kontrolleri için kullanılabilir. Çoğu durumda bu onay kutusu işaretsiz durumdadır.

 

            Owner Draw: Düğmenin sahibi tarafından çizileceğini belirtir. Bu özellik yalnızca basılır düğme kontrolleri için kullanılabilir. Çoğu durumda bu onay kutusu işaretsiz durumdadır.

            Help ID: Bu kontrol için ortama duyarlı bir yardım ID’si yaratır. Bu seçenek normalde seçili değildir.

 

            Icon: Bu kontrolün yazı yerine bir icon göstereceğini belirtir. İkon, SetIcon fonksiyonu kullanılarak düğmeye atılır. Bu seçenek normalde seçili değildir.

 

            Bitmap: Bu kontrolün yazı yerine bir bitmap  göstereceğini belirtir. Bitmap, SetBitmap fonksiyonu kullanılarak düğmeye atanır. Bu seçenek normalde seçili değildir.

 

            Notify: Mesajların kontrolün sahibine gönderilmesi gerektiğini belirtir. Bu seçenek seçilmese bile düğme tıklama mesajları kontrolü sahibine gönderilecektir. Bu onay kutusu normalde seçili değildir.

 

            Horizantal Alignment: Yazının yatay olarak nasıl hizalanacağını gösterir. Seçilebilecek seçenekler Default, Left, Right ve Center’dır. Bu özellik normalde default olarak seçilidir.

 

            Multiline: Düğme üzerindeki yazı tek satıra  sığmayacak kadar uzunsa yazının birden fazla satır halinde gösterilmesini sağlar. Bu özellik grup kutuları için kullanılmaz bu onay kutusu normalde işaretli değildir.

 

            Flat: Düğmenin 3-boyutlu efektler olmadan çizilmesi gerektiğini belirtir. Bu stil grup kutuları için kullanılmaz. Bu onay kutusu normalde işaretli değildir.

 

            Vertical Alignment: Yazının dikey olarak nasıl hizalanacağını gösterir. Seçenekler Default, Top, Bottom ve Center’dır. Bu özellik normalde Default olarak seçilidir.

 

            Auto: Kontrolün tıklandığında değil seçildiğinde durum değiştirmesi gerektiğini belirtir. Bir kontrolü tıklamadan seçmek için Tab tuşuna basmanız gerekir bu özellik yalnızca onay kutuları ve radyo düğmeleri için kullanılabilir. Bu onay kutusu normalde işaretli değildir.

 

            Left Text: Yazının kontrolün sol tarafına yerleştirilmesinin gerektiğini belirtir. Bu özellik yalnızca onay kutuları ve radyo düğmeleri için kullanılabilir. Bu onay kutusu normalde işaretli değildir.

 

            Push-Like: Bir radyo düğmesi yada onay kutusunun basılı düğme gibi çizileceğini belirtir. Kontrolün işaretlendiğinde veya seçildiğinde aşağıya gömülü görünür.

 

            Tri-State: Bir onay kutusunun iki değil üç durumlu olabileceğini gösterir. True ve False durumlarına ek olarak, kontrol kullanılmaz durumda da olabilir. Bu durumda onay kutusunun durumu ne True ne de False’dur.

İletişim Kutularınızda Standart Basılır Düğme Düzenleri Kullanmak

 

        Kontroller içeren iletişim kutularında çok sayıda basılır düğme yaygın olarak kullanılır. Bu düğmelerin her biri özel bir anlam taşıdığından mümkün oldukça standart terminolojiyi kullanmanızda fayda var çünkü bu sayede programlarınızın kullanıcılarının işi en aza indirgenir. Aşağıda bu düğmelerin standart anlamları verilmektedir.

 

OK: İletişim kutusundaki bilgileri kabul edip kutuyu kapatmak için kullanılır. İletişim kutusunda kullanıcının girdiği tüm bilgiler program tarafından kullanılır. OK düğmesinin tüm harfleri büyük harf olan tek düğme olduğuna dikkat edin.

 

            Cancel: İletişim kutusu açıkken yapılan değişiklikleri iptal edip iletişim kutusunu kapatmak için kullanılır. Geri döndürülmeyecek değişiklikler yapıldıysa bu düğmenin etiketi Close yapılmalıdır.

 

            Close: iletişim kutusunu kapatmak için kullanılır. Programın herhangi bir işlem yaptığını göstermez. İletişim kutusu açıkken yapılan değişiklikleri iptal etmek için Cancel düğmesi kullanılmadığında Close kullanılır. Bir çok rpogram Cancel düğmesini Close olarak değiştirir.

 

            Help: Açık iletişim kutusu için ortama duyarlı yardım istemek için kullanılır.

 

            Apply: İletişim kutusunda girilen verilere dayanarak değişiklik yapmak için kullanılır. OK düğmesinden farklı olarak Apply düğmesine basıldığında iletişim kutusu açık kalmalıdır.

 

Üye Değişkenleri Bir Düğme Kontrolü İle İlişkilendirme

 

            Bir değere kontrol atamanın veya kontrolün değerini öğrenmenin en kolay yolu ClassWizard’ı kullanarak kontrolü sınıfın bir üye değişkeniyle ilişkilendirmektir. Bir üye değişkeni bir kontrol ile ilişkilendirirken üye değişkeni kontrol ile veya kontrolün değeri ile ilişkilendirebilirsiniz. Düğmeleri temsil eden üye değişkenlerin değer üzerinden ilişkilendirilmesi çok nadirdir. Bunun yerine bir çok düğme kontrolünü temsil etmek için CButton sınıfı kullanılır.

 

CDialog sınıfından türetilmiş bir sınıfa bir üye değişken eklemek için şua adımları izleyin.

 

·        ClassWizard’ı açın.

·        Member Variables adlı sekmeyi seçin.

·        İletişim kutusunu yöneten CDialog’dan türetilmiş sınıfı seçin.

·        Yeni üye değişkenle ilişkilendirilmiş kontrolü temsil eden kontrol ID’sini seçin.

·        Add Variable adlı düğmeye basın. Add Member Variable iletişim kutusu görünecektir. Kontrolün adını, kategorisini ve değişken tipini girdikten sonra OK’e tıklayın.

·        ClassWizard’ı kapatın.

 

Bir İletişim Kutusu Sınıfına Düğme Olayları Eklemek

 

            Düğmeler iletişim kutusu kaynağının parçaları olmasına ve iletişim kutusu her gösterildiğinde görünmesine rağmen düğmeler kullanılmadığında bir şey olmaz çünkü iletişim kutusu sınıfı düğme olayları karşısında ne yapılacağını bilmemektedir.

 

            Basılır düğmeler normalde bir iletişim kutusu sınıfındaki düğme olayları ile ilişkilendirilmiştir. Düğme tıklaması ile gerçekleşecek bir olayı eklemek için aşağıdaki adımları izleyin.

 

·        ClassWizard’ı açın.

·        Message Maps adlı sekmeyi seçin.

·        İlgili iletişim kutusu sınıfını seçin.

·        Nesne (Düğme) ID’sini seçin.

·        Messages liste kutusundan BN_CLICKED seçin.

·        Add Function düğmesine basın ve üye fonksiyon için önerilen varsayılan ismi kabul edin.

·        ClassWizard’ kapatın.

 

Düğmeleri Kullanılabilir Ve Kullanılamaz Hale Getirmek

 

            Çoğu kontrol varsayılan olarak başta kullanılabilir durumdadır. İlgili özellik kontrolün özellik listesinde ayarlanarak kontrol kullanılmaz hale getirilir. Bir kontrol yalnızca kullanılabilir haldeyse seçilebilir. CWnd sınıfı bir CWnd nesnesinin  kullanılabilir veya kullanılamaz olmasını sağlayan EnableWindow üye fonksiyonunu içerir. CButton ve tüm diğer kontroller CWnd sınıfından türetildiğinden CWnd sınıfındaki tüm üye verileri ve üye fonksiyonları içerirler. Bir düğmeyi şu şekilde kullanılamaz hale getirebilirsiniz.

 

                PButton -> EnableWindow(FALSE); // Kontrolü kullanılmaz hale getirir

 

            Pencere veya kontrol kullanılabilir duruma getirilecekse EnableWindow fonksiyonunun parametresi True, aksi halde False olmalıdır. EnableWindow’un parametresinin varsayılan değeri True’dur çünkü kontrolü kullanılabilir hale getirmek için bir parametre gerekmez.

 

                PButton -> EnableWindow(); // Kontrolü kullanılabilir hale getirir

 

            Düğme ve diğer kontrollerin iletişim kutusu tarafından alınan olaylara bağlı olarak kullanılabilir veya kullanılamaz hale getirilmesi yaygın bir işlemdir. Örnek olarak, bir düğmeye basmak başka bir düğmenin kullanılabilir veya kullanılamaz hale getirilmesine neden olabilir. Örneğin:

 

                void CbuttonDlg::OnBtnTest()

                {

                               static BOOL bEnableControl = FALSE;

                               m_btnAmp.EnableWindow(bEnableControl);

                               if(bEnableControl == TRUE)

                                               bEnableControl = FALSE;

                               else

                                               bEnableControl = TRUE;

                }

 

Düğmeleri Gizleme

 

            Bir iletişim kutusundaki bir düğmeyi gizlemeniz gerekebilir. CWnd sınıfı gerektiğinde bir pencereyi gizlemek veya göstermek için kullanılabilecek bir üye fonksiyonuna sahiptir. CWnd::ShowWindow üye fonksiyonunu şu şekilde kullanılır.

 

                PButton -> ShowWindow (SW_HIDE); //Kontrolü gizler

 

            Bu kod bir düğme kontrolü olan pButton penceresini gizler. Gizlenmiş bir pencereyi göstermek için ShowWindow fonksiyonu SW_SHOW parametresiyle kullanılır.

 

                PButton -> ShowWindow (SW_SHOW); //Kontrolü gösterir

 

            Bir örnekle kullanalım.

 

                void CbuttonDlg::OnBtnTest()

                {

                               static int nShowControl = SW_HIDE;

                               m_btnAmp.ShowWindow(nShowControl);

                               if(nShowControl == TRUE)

                                               nShowControl = SW_HIDE;

                               else

                                               nShowControl = SW_SHOW;

                }

 

Sekme Sırasını Tanımlama ve Ayarlama

 

            Bir iletişim kutusu kullanıcıya sunulduğunda klavye kontrollerden birinde odaklanmış olur. Bu kontrol klavyeden giriş alır. Bir kontrole odaklandığında o kontrolün etrafında noktalı bir çerçeve çizilir.

 

            Kullanıcı klavyeden Tab tuşuna basarak yeni bir kontrole odaklanabilir. Her tab tuşuna basıldığında yeni bir kontrole odaklanır. Bunun nasıl çalıştığını tam bilmiyorsanız Developer Studio’daki iletişim kutularından bazılarında bunu denemek isteyebilirsiniz.

 

            Kontroller daima sekme sırası (tab order) olarak bilinen sabit bir sırada seçilirler. Sekme sırası kullanıcıların fare kullanmadan kontrolleri seçmesine olanak sağlar. Hemen hemen tüm Windows kullanıcları fare kullanmalarına rağmen bazen klavyeyi kullanmak daha uygundur. Ayrıca Windows iletişim kutularında kontroller arasında Tab tuşuyla geçiş yapmak standart bir özellik olduğundan bu özelliği doğru kullanmanız gerekir.

 

            Bir iletişim kutusunda sekme sırasını kontrollerin kaynak kodunda tanımlandığı sırayı izler. Yeni kontroller ekledikçe bunlar sekme sırasının sonuna yerleştirilir. Bu sırayı değiştirmek için Developer Studio’nun içerdiği kaynak araçlarını kullanabilirsiniz

Düzenleme Kontrolleri

 

Düzenleme Kontrollerini Anlama

 

            Bir düzenleme kontrolü kullanıcının girdiği metni saklamak için kullanılan bir penceredir.

 

            Tek satırlık düzenleme kontrolü tek satırlık metin girilmesine izin veren bir düzenleme kontrolüdür.

 

            Çok satırlı düzenleme kontrolü birden fazla metin satırı girilmesine izin veren bir düzenleme kontrolüdür.

 

            Düzenleme kontrolleri genellikle iletişim kutularında bulunurlar. Kullanıcı girişi gerekli olan hemen her yerde bir düzenleme kontrolü bulabilirsiniz.

 

Düzenleme Kontrolleri Niçin Kullanılır?

 

            Kullanıcıdan bir metin girişi alınması gerektiğinde tek satırlık düzenleme kontrolü kullanırsınız. Örneğin, bir iletişim kutusunda bir isim ya da adres girilmesi gerektiğinde o bilgiyi almak için bir düzenleme kontrolü kullanılmalıdır. Çok satırlı düzenleme kontrolleri çoğunlukla görüntülenebilenden daha fazla metin girilmesine olanak sağlayan kaydırma çubuklarına sahiptir.

 

            Bir düzenleme kontrolünde kullanıcıya varsayılan bir metin hazır olarak sunulabilir. Bu bazı durumlarda kullanıcının girmesi gereken yazı miktarını azaltabilir. Ayrıca tüm düzenleme kontrolleri sizin fazladan bir programlama yapmanıza gerek kalmadan sınırlı miktarda metin düzeltme işlemini destekler. Örneğin standart kesme ve yapıştırma komutları bir düzenleme kontrolünde de beklendiği gibi çalışır.

 

Düzenleme Kontrolleri İçin MFC Desteği

 

            Bir iletişim kutusuna kontrolü ekledikten sonra kontrolü programda kullanmak üzere Class Wizard’ı kullanın. Düzenleme kontrolleriyle etkileşim çoğunlukla CEdit adlı MFC sınıfı kullanılır. Bir düzenleme kontrolü belli bir CEdit  nesnesiyle ilişkilendirmek için Class Wizard’ı kullanabilirsiniz. Bir düzenleme kontrolü, düzenleme kotnrollerinin iletişim kutularında kullanımını kolaylaştırabilen CString nesnesiylede ilişkilendirilebilir.

 

Düzenleme Kontrollerinin Özellikleri

 

            Düzenleme kontrolüne farenin sağ tuşuyla tıklayıp açılan menüden Properties komutunu seçerek düzenleme kontrolünün özelliklerini inceleyebilirsiniz. Bir düzenleme kontrolü aşağıda verilen genel özelliklere sahiptir.

 

            ID: Düzenleme kontrolünün kaynak ID’si için kullanılır. Diğer kontrollerde olduğu gibi düzenleme kontrolü içinde Developer Studio varsayılan bir kaynak ID’si önerir.

 

            Visible: Düzenleme kontrolünün başlangıçta görünür olduğunu belirtir. Bu seçenek normalde seçili durumdadır.

            Disabled: Metin kutusunun başlangıçta kullanılamaz durumda olacağını belirtir. Bu seçenek normalde seçilmemiş durumdadır.

 

            Group: Bir gruptaki ilk kontrolü belirlemek için kullanılır. Bu özelliği olan bir kontrolü izleyen tüm kontroller eğer bu özellik işaretlenmemişse aynı grubun parçası olarak kabul edilirler. Kullanıcı ok tuşlarını kullanarak bir grup içindeki kontroller arasında gezinebilir.

 

            Help ID: Bu kontrol için ortama bağlı duyarlı bir yardım ID’si yaratır.

 

            Tab Stop: Bu kontrole Tab tuşuna basılarak erişilebileceğini gösterir. Bu seçenek normalde seçili durumdadır.

 

            Ayrıca yalnızca düzenleme kontrolleri için geçerli özellikler vardır. Properties iletişim kutusundaki Styles sekmesine tıklanarak aşağıdaki özellikler görüntülenebilir.

 

            Align Text: Düzenleme kontrolü çok satırlı ise kullanılabilen bir açılan liste. Metin sola, ortada veya sağa hizalanabilir. Ön değer sola hizalamadır.

 

            Multiline: Kontrolün çok satırlı bir düzenleme kontrolü olacağını belirtir. Bu seçenek normalde seçili değildir.

 

            Number: Düzenleme kontrolüne yalnızca rakam girilebileceğini gösterir.

 

            Horizontal Scroll: Yalnızca çok satırlı düzenleme kontrollerinde kullanılabilir ve yatay bir kaydırma çubuğu yaratır. Bu seçenek normalde seçili değildir.

 

            Auto HScroll: Metni gerekirse sağa kaydırır. Bu seçenek normalde seçilidir.

 

            Vertical Scroll: Yalnızca çok satırlı düzenleme kontrollerinde kullanılabilir ve düşey bir kaydırma çubuğu yaratır. Bu seçenek normalde seçili değildir.

 

            Password: Kullanıcın girdiği her karakter yerine yıldız işareti göstererek kullanıcı girişini gizler. Bu seçenek yalnızca tek satırlı düzenleme kontrollerinde geçerlidir ve normalde seçili değildir.

 

            No Hide Selection: Bir düzenleme kontrolüne odaklanıldığında kontrolün davranışını değiştirir. Bu seçenek seçildiğinde metin hep seçili görünür. Bu seçenek normalde seçili değildir.

 

            OEM Convert: Programın AnsiToOem fonksiyonunu çağırması halinde fonksiyonun doğru çalışmasını sağlamak için kullanıcı girişi üzerinde dönüşümler gerçekleştirir. Bu seçnek normalde seçili değildir.

 

            Want Return: Çok satırlı düzenleme kontrollerinde geçerlidir. Bu seçenek, düzenleme kontrolünün Enter tuşuna basılmasını kabul etmesine olanak sağlarken Enter tuşuna basılması iletişim kutusunun varsayılan basılır düğmeyi etkilemesine engel olur.

 

            Border: Kontrolün çevresinde bir sınır yaratır. Bu seçenek normalde seçilidir.

 

            Uppercase: Tüm girişi büyük harfe çevirir. Bu seçenek normalde seçili değildir.

 

            Lowercase: Tüm girişi büyük harfe çevirir. Bu seçenek normalde seçili değildir.

 

            Read-only: Kullanıcının düzenleme kontrolüne giriş yapmasını veya kontroldeki metni değiştirmesini önler. Bu seçenek normalde seçili değildir.

 

Bir CEdit Nesnesini Bir Düzenleme Kontrolüne Bağlamak

 

Daha önce söz edildiği gibi, bir düzenleme kontrolü ile etkileşimde bulunmanın bir yolu kontrole iliştirilmiş bir CEdit nesnesi aracılığıyladır. Bir düzenleme kontrolüne bir CEdit nesnesi iliştirmek için daha önceki konuda düğme kontrolleri için yaptığınız biçimde ClassWizard’ı kullanacaksınız.

 

·        Class Wizard’ı açın.

·        İletişim kutsunu yöneten CDialog sınıfından türetilmiş sınıfı seçin.

·        Member Variables etiketli sekmeyi seçin.

·        Yeni üye ile ilişkilendirilmiş kontrolü temsil eden kontrol ID’sini seçin.

·        Add Variable düğmesini tıklayın. Add Variable iletişim kutusu görünecektir. Kontrolün adını, kategorisini ve değişken tipini girip OK tıklayın.

 

Category kontrolünde görülen varsayılan değer Value dur. Value kategorisi bu daha sonra DDV ve DDX rutinlerini öğrendiğinizde bazı üye değişkenler için kullanılacaktır.

 

Bir Düzenleme Kontrolüne Girilen Metni Almak

 

Düzenleme kontrolleri kullanmanın asıl amacı elbette ki kullanıcıdan bilgi toplamaktır. Bunu yapmak için düzenleme kontrolüne girilen bilgiyi almanız gerekir. CEdit sınıfını kullanmak bu işlemi kolaylaştırır.

 

Girilen Metni Almak İçin CEdit Fonksiyonlarını Kullanmak

 

Bir düzenleme kontrolüne girilen bilgiyi alırken GetWindowText ve LineLength üye fonksiyonları gibi çeşitli CEdit üye fonksiyonları kullanılır. Örnek olarak şu şekilde kullanabilirsiniz.

 

Void CTestDlg::OnTest ()

{

                               CString szEdit;

                CString szResult;

                int nLength = m_editTest.LineLength();

                m_editTest.GetWindowTest( szEdit );

                szResult.Format(“%s has %d chars”, szEdit, nLength);

                               AfxMessageBox(szResult);

}

 

Test düğmesine tıkladığında m_editTest nesnesi kullanılarak düzenleme kontrolüne girilen yazı alınır. Yazı szEdit adlı bir CString nesnesine yerleştirilir.

 

CString sınıfının format üye fonksiyonu, ilk parametrede aktarılan desen kullanarak karakter katarının içeriğini biçimlendirir. CString’in içeriğini yaratmak üzere birleştirilen ilave parametreler için %s ve %d gibi semboller kullanabilirsiniz. %s sembolü karakter katarları için %d sembolü int veri tipi için kullanılır.

 

Normalde yalnızca OK düğmesine tıklanırsa metin kutusuna girilen veri ile ilgilenirsiniz. Cancel düğmesini tıklandıysa iletişim kutusu kapanmalı ve girilen herhangi bir veri gözardı edilmelidir.

 

DDV ve DDX Rutinlerini Kullanarak İletişim Kutularına Parametre Aktarımı

 

DDV ve DDX rutinleri iletişim kutuları için verilen yönetmeye yardımcı olan yardımcı fonksiyonlardır. DDV (Dialog Data Validation) rutinleri verilerin geçerliliği için kullanılır. DDX (Dialog Data Exchange) rutinleri bir iletişim kutusundaki kontrollere veri aktarmak için kullanılır.

 

DDV ve DDX Rutinleri Niçin Kullanılır?

 

DDV rutinleri bir düzenleme kontrolüne girilen veriyi alırken çok kullanışlıdır. Genelde kullanıcının bir düzenleme kontrolüne girdiği veri üzerinde çok az kontrole sahipsinizdir. DDV değer aralığı veya karakter katarı uzunluğuna bağlı olarak veri geçerliliğini basit bir biçimde test etmenize olanak sağlar.

 

Örneğin bir düzenleme kontrolüne kısaltılmış bir eyalet ismi girilecekse girilen metni iki karakterle sınırlandırmak istersiniz. Bir DDV rutini kullanarak yalnızca  iki karakter girildiğinden emin olmak kolaydır.

 

DDX fonksiyonları iletişim kutusu sınıfındaki üye değişkenleri iletişim kutusunun içerdiği kontrollere bağlıdır. DDX rutinleri verilerin kontrollere aktarılmasını ve kontrollerden alınmasını çok kolaylaştırır.

 

CMyDialog dlgMine;

DlgMine.DoModal();

 

Bu örnekte DoModal çağrıldığında iletişim kutusu yaratılır ve kullanıcı iletişim kutusunu kapatana kadar fonksiyon sonlanmaz. İletişim kutusuna veri aktarmak veya kutudan veri almak gerekirse bu durumda sorun yaratır. İletişim kutusu yaratılana kadar hiçbir kontrol mevcut olmadığından iletişim kutusunun içerdiği kontrollerle doğrudan etkileşimde bulunmak için SetWindowText, GetWindowText gibi fonksiyonları kullanmak mümkün değildir. İletişim kutusu kapandıktan sonra kullanıcı girişlerini almak için bu fonksiyonları kullanmak artık çok geçtir.

 

Bir iletişim kutusuyla bilgi alış verişinde bulunmak için DDX rutinleri kullanıldığında iletişim kutusu şöyle kullanılabilir.

 

CMyDialog dlgMine;

dlgMine.m_szTest = “Merhaba Dünya”;

dlgMine.DoModal();

 

DDX rutinleri iletişim kutusu yaratılmadan önce ve yaratıldıktan sonra iletişim kutusunun kontrollerine erişebilmenizi sağlarlar. Bu durum iletişim kutusunu programlamayı kolaylaştırır çünkü bu yöntem InitDialog üye fonksiyonuna kod eklemekten çok daha esnek bir yöntemdir.

 

DDV ve DDX Rutinlerini Kullanmak

 

İletişim kutusu  sınıfınıza DDV ve DDX rutinleri eklemenin en kolay ve en kullanışlı yolu ClassWizard’ı kullanmaktır. İletişim kutusu kontrolleriyle değer üzerinden ilişkilendirilmiş üye değişkenleri otomatik olarak MFC’nin sunduğu DDV ve DDX rutinlerini kullanır. Örneğin CString üye değişkenleri çoğunlukla düzenleme kontrolleriyle ilişkilendirilmiştir. ClassWizard veri değişimi ve geçerliliğini yönetmek için iki yere kaynak kod ekler.

 

·        Üye değişkene ilk değer vermek için iletişim kutusunun yapılandırıcısına kaynak kod eklenir.

·        ClassWizard, bir kontrolün değeriyle ilişkilendirilmiş her üye değişkeni için iletişim kutusunun DoDataExchange üye fonksiyonuna DDV ve DDX rutinleri ekler.

 

DoDataExchange kontrol ile iletişim kutusunun üye değişkeni arasında veri aktarımı için MFC tarafından çağrılan sanal bir fonksiyondur. DoDataExchange üye fonksiyonu asla doğrudan çağırmazsınız; Bunun yerine UpdateData fonksiyonunu çağırırsınız ve MFC yapısı DoDataExchange fonksiyonunu sizin için çağırır. UpdateData fonksiyonu TRUE ve FALSE değerini alabilen tek bir parametre alır. Parametrenin varsayılan değeri TRUE’dur.  UpdateData (FALSE) çağrıldığında veri üye değişkenden kontrole aktarılır. UpdateData (TRUE) çağrıldığında veri kontrolden üye değişkene kopyalanır.

 

İletişim kutusu CDialog::OnInitDialog sırasında ilk görüntülendiğinde, üye değişkenlerden iletişim kutusunun kontrollerine veri aktarımı için UpdateData(FALSE) çağrılır. Daha sonra CDialog::OnOK sırasında iletişim kutusunun kontrollerinden üye değişkenlere veri aktarmak için UpdateData() çağrılır.

 

Bir Kontrolün Değerini Bir Üye Değişkenle İlişkilendirmek

 

Bir kontrolün değeriyle ilişkilendirilmiş üye değişken ekleme işlemi daha önce  yaptığınız kontrol-tip değişkeni ekleme işlemine çok benzer. Örneğin IDD_EDIT_TEST düzenleme kontrolüyle ilişkilendirilmiş bir üye değişkeni yaratmak için şu adımları izleyin :

 

·        ClassWizard’ı açın.

·        İletişim kutusunu yöneten CDialog sınıfından türetilmiş sınıfı seçin.

·        Member Variables sekmesini seçin.

·        Yeni üye değişkenle ilişkilendirilmiş kontrol ID’sini seçin.

·        Add düğmesini tıklayın. Add Member Variable iletişim kutusu görülecektir. Kontrolün adını, kategorisini ve değişken tipini girip OK düğmesine tıklayın.

 

Add Member Variable iletişim kutusunu kapattıktan sonra, ClassWizard üye değişken üzerinde kullanılacak geçerlilik kriterini belirtmek için kullanabileceğiniz bir düzenleme kontrolü görüntüler. Bir düzenleme kontrolüyle bir CString nesnesi ilişkilendirilmişse maksimum karakter katarı uzunluğu girilebilir. Sayısal bir değişken kullanıldıysa izin verilen değer aralığı tanımlana bilir.

 

Liste Kutusu Kontrolü

 

Liste kutusu (List Box) kontrolleri seçilebilecek maddeler listesidir. Kullanıcı klavyeyi kullanarak veya fare ile bir maddeye tıklayarak maddeleri seçebilir.

 

Tek-seçimlik liste kutusu (Single-selection List Box) bir anda tek bir maddenin seçilmesine izin verir. Bir liste kutusunun varsayılan şekli budur.

 

Çok-seçimli liste kutusu (Multiple-selection List Box) bir anda birden fazla maddenin seçilmesine izin verir.

 

Bir liste kutusu normalde bir iletişim kutusu,  kontrol çubuğu veya kontroller içeren herhangi bir pencerede bulunabilir. Liste kutuları çoğunlukla çok sayıda öğe içerir. Bazı öğeler görüntülenemiyorsa kullanıcının listede gezinmesine yardımcı olmak için bir kaydırma çubuğu görünür.

 

Liste Kutuları Niçin Kullanılır?

 

Liste kutuları çok sayıda maddenin kullanıcıya görüntülenmesini sağlayan en basit kontrollerdir. Genelde liste kutuları veri tabanlarından veya raporlardan elde edilen bilgileri görüntülemek için kullanılır. Liste kutusunun büyüklüğünün değiştirilmesi gerekmediğinden bu tür veriler için çok uygundur. Sıralanmış bir liste kutusu kullanıldığından, kullanıcının çok sayıda madde arasında arama yapıp bir seçim yapması kolaylaşır.

 

Liste kutularını programlarınızda kullanmak çok kolaydır bir liste kutusu nesnesi yarattıysanız liste kutusuna tek satırlık bir kodla bir madde ekleyebilirsiniz.

 

listbox.AddString(“Yasin”);

 

Diğer kontrollerin hiçbirinin kullanımı hem kullanıcı hem de programcı için bu kadar kolay ve esnek değildir.

 

Liste Kutuları İçin MFC Desteği

 

Bir iletişim kutusuna liste kutusu ekleme işlemi, daha önceden yaptığınız düğme ve düzenleme kontrolleri ekleme işlemine çok benzer. Kontrolü ekledikten sonra mesaj yönetim fonksiyonları eklemek ve kontrolü bir CListBox nesnesi ile ilişkilendirmek için ClassWizard’ı kullanın.

 

Liste kutusu kontrolünü yönetmek ve kontrolle etkileşimde bulunmak için MFC CListBox sınıfını kullanabilirsiniz. Diğer kontroller sınıfları gibi CListBox sınıfı da CWnd sınıfından türetilmiştir ve CWnd fonksiyonlarının çoğu CListBox nesneleriyle kullanılabilir.

 

Liste Kutusunun Özellikleri

 

Diğer kontroller gibi liste kutuları da Developer Studio kaynak editörünü kullanarak ayarlayabileceğiniz özelliklere sahiptir. Bu özelliklerin bazıları diğer kontrollerde de vardır, bazıları ise yalnızca liste kutularına özgüdür. Bir liste kutusunun sahip olduğu özellikler şunlardır.

 

ID: Liste kutusunun kaynak ID’si için kullanılır. Developer Studio IDC_LIST gibi varsayılan bir kaynak ID’si önerir.

 

Visible: Listenin başlangıçta görünür olduğunu belirtir. Bu onay kutusu normalde işaretlidir.

 

Disabled: Listenin başlangıçta kullanılamaz durumda olduğunu belirtir. Bu onay kutusu normalde işaretli değildir.

 

Group: Bir gruptaki ilk kontrolü belirler. Bu onay kutusu normalde işaretli değildir.

 

Tab Stop: Bu kontrole Tab tuşuna basılarak erişilebileceğini belirtir. Bu onay kutusu normalde işaretlidir.

 

Help ID: Bu kontrol için ortama duyarlı bir yardım ID’si yaratır.

 

Selection: Bir liste kutusundaki maddelerin nasıl seçilebileceğini belirler. Tek-seçimlik liste kutusu bir anda tek bir maddenin seçilebileceğine izin verir. Çok-seçimlik liste kutuları bir anda birden fazla madde seçimine izin verir ama Shift ve CTRL tuşları görmezden gelir. Genişletilmiş seçimli (extended selection) liste kutuları seçim sırasında Shift ve CTRL tuşlarını kullanır.

 

Owner Draw: Düğmenin sahibi tarafından çizilebileceğini belirtir. Çoğu durumda bu seçenek NO olarak seçilidir.

 

Has Strings: Sahibi tarafından çizilen bir liste kutusunun karakter katarları içerdiğini belirtir. Diğer tüm liste kutuları varsayım olarak karakter katarları içerir.

 

Border: Liste kutusu için bir sınır çizer. Bu seçenek başlangıçta seçili durumdadır.

 

Sort: Liste kutusunun içeriğinin sıralı olacağını belirtir. Bu seçenek normalde seçilidir.

 

Notify: Bildirme mesajlarını iletişim kutusuna gönderilmesi gerektiğini belirtir. Bu seçenek normalde seçilidir.

 

Multi-Column: Çok sütunlu bir liste kutusu yaratır bu seçenek normalde seçili değildir.

 

Horizontal Scroll: Yatay kaydırma çubuğu içeren bir liste kutusu yaratır. Bu seçenek normalde seçili değildir.

 

Vertical Scroll: Düşey kaydırma çubuğu içeren bir liste kutusu yaratır. Bu seçenek normalde seçilidir.

 

No Redraw: Liste kutusunun içeriği değiştiğinde görünümünün güncellenmemesi gerektiğini belirtir. Bu seçenek çok nadir olarak seçilir  ve başlangıçta seçili değildir.

 

Use Tabstops: Liste kutusunda görünen yazı maddelerinin sekme içerebileceğini belirtir. Bu sekme normalde seçili değildir.

 

Want Key Input: Liste kutusuna odaklanıldığı sırada tuşlara basıldığında liste kutusunun sahibine WM_VKEYTOITEM veya WM_CHARTOITEM mesajlarının gönderilmesi gerektiğini belirtir. Bu seçenek normalde seçili değildir.

 

Disable No Scroll: Gerekmese bile düşey yatay çubuğu görüntüler. Bu seçenek normalde seçili değildir.

 

No Integral Height: Windows’un liste kutusunu aynı kaynak tanımından belirtildiği gibi görüntülemesi gerektiğini belirtir. Bu seçenek normalde seçilidir.

 

CListBox Sınıfını Kullanmak

 

Önceki kontrollerde kullandığımız kontrol sınıfı gibi MFC CListBox sınıfıda kontrol mesajlarını gizleyen bir C++ sınıfı sayesinde yaşamınızı kolaylaştırır ve kullanımı kolay bir arabirim sunar. Bir CListBox nesnesini bir liste kutusu kontrolüne iliştirmek için önce ki kontrollerde yaptığımız gibi ClassWizard’ı kullanın.

 

·        ClassWizard’ı açın.

·        İletişim kutusunu yöneten CDialog sınıfından üretilmiş sınıfı açın.

·        Member Variables sekmesini seçin.

·        Yeni üye değişkenle ilişkilendirilmiş kontrolü temsil eden kontrol ID’sini seçin.

·        Add Variable düğmesini tıklayın. Add Member Variable iletişim kutusu görünecektir. Kontrolün adı, kategorisini ve değişken tipini girip OK’e ıklayın.

 

Liste Kutusuna Madde Eklemek

 

Bir liste kutusuna bir karakter katarı eklemenin iki yolu vardır.

 

·        Bir liste kutusuna bir karakter katarı eklemek için AddString üye fonksiyonu çağrılabilir.

 

m_ListBox.AddString(“EFE”);

 

Sıralı bir liste kutusuna girilen tüm karakter katarları liste kutusuna eklendikleri sırada sıralanır. Liste kutusu sıralı değilse eklenen madde listedeki son maddenin altına eklenir.

 

·        Bir liste kutusunda belirtilen konuma bir madde eklemek için InsertString üye fonksiyonunu kullanın.

 

m_ListBox.InsertString(0,”Yasin EFE”);

 

Bir liste kutusundaki her madde sıfırdan başlayarak numaralanır. Liste kutusuna yeni madde eklenirken yer açmak için gerekirse diğer maddeler aşağıya kaydırılır.

 

InsertString ve AddString fonksiyonlarının ikisi de yeni maddenin sıra numarasını döndürür. Bir maddeyi eklerken hata oluşursa AddString veya InsertString fonksiyonları LB_ERR hatası döndürür. Liste kutusu doluysa LB_ERRSPACE hatası döndürülür.

 

Bir liste kutusundaki madde sayısını belirlemek için GetCount üye fonksiyonunu kullanın.

 

nItems =ListBox.GetCount();

Liste Kutusundan Madde Çıkarmak

 

Bir liste kutusundan madde çıkarmak için DeleteString üye fonksiyonunda parametre olaak çıkarılacak maddenin sıra numarasını gönderin.

 

ListBox.DeleteString(8);

 

Bu satır liste kutusunun 9. Sırasındaki maddeyi siler. Liste kutularında sıra numaralarının 0 dan başladığını unutmayın. DeleteString üye fonksiyonu liste kutusunda kalan madde sayısını veya bir hata oluşması halinde LB_ERR hatası döndürür. Döndürülen değer şu şekilde kullanılabilir.

 

int nItems = ListBox.GetCount();

while (nItems > 3 && nItems != LB_ERR)

nItems = ListBox.DeleteString(nItems-1);

 

Bu kod bir liste kutusundaki ilk 3 madde dışında bütün kodları siler. Liste kutusunu tamamen boşaltmak için ResetContent fonksiyonunu kullanın.

 

ListBox.ResetContent();

 

ResetContent fonksiyonu void döndürür.

 

Liste Kutusu Mesajlarını Almak

 

Belli olaylar olduğunda bir liste kutusunun ebeveynine çeşitli mesajlar gönderilir. Tüm bu mesajlar LBN_ önekine sahiptir. Bu mesajların gönderilmesi için liste kutusunun Notify özelliği aktif olmalıdır. Liste kutusundan ebeveynine şu mesajlar gönderilir.

 

·        Kullanıcı bir liste kutusu maddesine çift tıkladığında LBN_DBLCLK mesajı gönderilir.

·        LBN_ERRSPACE mesajı bellek eksikliğinden dolayı bir işlemin gerçekleştirilemediğini gösterir.

·        LBN_KILLFOCUS mesajı liste kutusundan başka bir kontrole odaklanılmadan hemen önce gönderilir.

·        LBN_SELCANCEL mesajı kullanıcı bir kutusu seçimini iptal ettiğinde gönderilir.

·        LBN_SELCHANGE mesajı liste kutusundaki seçim durumu değişmek üzereyken gönderilir.

·        LBN_SETFOCUS liste kutusuna odaklanıldığında gönderilir.

 

LBN_DBLCLK mesajı en sık kullanılan mesajdır. Bir çok kullanıcı bir liste kutusu maddesine çift tıklanıldığında varsayılan bir işlemin yürütülmesini bekler. Örneğin, dosya isimleri listesi görüntülendiğinde bir dosya ismine çift tıklandığı zaman o dosyanın açılması beklenebilir.

 

Windows’da kullanılan tüm kontrollerle ilgili mesaj yöntemi fonksiyonları eklemek için gerekli adımlar birbirine benzer. LBN_DBLCLK mesajı için mesaj yöntemi fonksiyonu yaratmak üzere şu adımları izleyin.

 

·        ClassWizard’ı açın ve Message Maps sekmesini tıklayın.

·        CListBoxDlg sınıfını ve IDC_LIST ID’sini seçin.

·        LBN_DBLCLK mesajını seçin ve Add Function düğmesine tıklayın.

·        Önerilen CListBoxDlg::OnDblClkList fonksiyon adını kabul edin.

·        Edit Code düğmesine tıklayın.

·        Aşağıda verilen kodu CListBoxDlg::OnDblClkList fonksiyonuna ekleyin.

 

void CListBoxDlg::OnDblClkList()

{

                int nSelection = m_listBox.GetCurSel();

                if (nSelection != LB_ERR)

                {

                               CString szSelection;

                               m_listBox.GetText(nSelection, szSelection);

                               AfxMessageBox( szSelection );

                }

}

 

Yukarıda gösterildiği gibi CListBox::GetCurSel üye fonksiyonunu kullanarak liste kutusunda o anda seçilen maddeyi belirleyebilirsiniz. GetCurSel üye fonksiyonu o anda seçilen maddenin sıra numarasını döndürür. Listedeki ilk maddenin sıra numarasının 0 olduğunu unutmayın. Bir madde seçilmemişse veya liste kutusu çoklu-seçim özelliğine sahipse LB_ERR hata döndürülür.

 

 

Bileşik Kutu Kontrolü

 

Bileşik kutu (combo box) kontrolü bir düzenleme kontrolüyle liste kutusunun birleşimidir. Bileşik kutu kontrolü, kullanıcının bir düzenleme kontrolüne yazı girer gibi veya bir liste kutusundaki çeşitli maddelerden birini seçer gibi veri girmesine olanak sağlar.

 

Kullanıcı yalnızca liste kutusunda sunulan maddelerle sınırlı olmadığından bileşik kutular çok kullanışlıdır. Bileşik kutunun liste kutusu kısmı kullanıcıya yakın seçenekler göstermek için kullanırken düzenleme kontrolü kısmı kullanıcıya yeni bir seçim girme serbestisi tanır. Üç tip bileşik kutu vardır.

 

·        Basit bileşik kutular (simple combo box) bir düzenleme kontrolü ve liste kutusu görüntüler. Diğer bileşik kutu tiplerinden farklı olarak liste kutusu daima görünürdür. Liste kutusu gösterilebilecek olandan daha fazla madde içerdiğinde liste kutusundaki diğer maddeleri de görebilmek için bir kaydırma çubuğu kullanılır.

·        Açılan bileşik kutular (drop-down combo box) kullanıcı liste kutusunu açana kadar liste kutusunu gizler. Bu tip bileşik kutularda liste iletişim kutusunda basit bileşik kutulardan çok daha az yer kaplar.

·        Açılan liste kutuları (drop-down list box) yalnızca kullanıcı açtığı zaman liste kutusunu görüntülemeleri bakımından açılan bileşik kutulara benzerler. Ancak seçimi göstermek için düzenleme kontrolü yerine bir statik düzenleme kontrolü kullanılır. Bu nedenle kullanıcının seçebileceği maddeler liste kutusundaki maddelerle kısıtlıdır.

 

Bileşik Kutuların Özellikleri

 

      Bir bileşik kutu, bir düzenleme kontrolüyle liste kutusunun bileşimi olduğundan çok sayıda özelliğe sahiptir. Birçok düzenleme kontrolü ve liste kutusu stili bileşik kutularda da geçerli olabilecek benzer özelliklere sahiptir. Bu bileşik kutu özellikleri daha önce ele alınan liste kutusu özellikleriyle özdeştir.

 

·        ID

·        Visible

·        Disabled

·        Group

·        Tab Stop

·        Owner Draw

·        Has Strings

·        Sort

·        Vetical Scroll

·        No Integral Height

·        Help ID

·        Disable No Scroll

 

Aşağıdaki bileşik kutu özellikleri düzenleme kontrolleri için geçerli olan özelliklerle özdeştir.

 

·        Auto HScroll

·        Uppercase

·        Lowercase

·        OEM Convert

 

Şu iki özellik yalnızca bileşik kutu kontrollerine özgüdür.

 

·        List Choices: İletişim kutusu yaratıldığında varsayım olarak görüntülenen liste maddelerini listelemek için kullanılır. Her maddeden sonra CTRL+Enter tuşlarına basın.

·        Type: Bileşik kutunun tipini belirtmek için kullanılır. Bileşik kutunun tipi Simple, Drop Down veya Drop List olabilir. Varsayım olarak Drop Down seçilidir.

 

Bileşik Kutular İçin MFC Desteği

 

      Liste kutularında ve diğer kontrollerde olduğu gibi bileşik kutuları iletişim kutusu kaynaklarına Developer Studio iletişim kutusu editörünü kullanarak eklersiniz. Kontrolü ekledikten sonra mesaj yönetimi fonksiyonları eklemek ve kontrolü bir CComboBox  nesnesiyle ilişkilendirmek için ClassWizard’ı kullanın.

 

      Bileşik kutu kontrolüyle etkileşimde bulunmak için MFC CComboBox sınıfını kullanırsınız. Bu sınıf ClistBox ve CEdit sınıflarında bulunan üye fonksiyonlarından çoğunu içerir. Örneğin, bir bileşik kutuda o anda seçili maddeyi belirlemek için bileşik kutunun liste kutusu kısmından GetCurSel fonksiyonunu kullanabilirsiniz.

 

Bileşik Kutuya Maddeler Eklemek

 

Bileşik kutuya karakter katarı ekleme işlemi liste kutularına karakter katarları ekleme işlemine çok benzer. CListBox sınıfı gibi CComboBox sınıfı da AddString ve InsertString üye fonksiyonlarına sahiptir.

 

        ComboBox.AddString (“Yasin EFE”);

 

      veya

 

        comboBox.InsertString (0, “Yasin EFE”);

 

      Liste kutularında olduğu gibi bileşik kutularda da tüm maddeler sıfırdan başlayarak numaralanır. Ancak bir hata oluşursa LB_ERR yerine CB_ERR döndürülür. Yetersiz yer nedeniyle bir madde eklenmezse CB_ERRSPACE dödürülür.

 

      Bir bileşik kutudaki madde sayısını belirlemek için CComboBox sınıfını GetCount üye fonksiyonuna sahiptir.

 

        nItems = comboBox.GetCount();

 

Liste kutularında farklı olarak bileşik kutular bir hata olduğunda CB_ERR mesajını dödürür.

 

 

 

Bileşik Kutunun Değerini Öğrenme

 

      Bir bileşik kutuya girilen değeri, düzenleme kontrollerinde olduğu gibi GetWindowText üye fonksiyonunu kullanarak öğrenebilirsiniz. Basit bileşik kutular ve açılan bileşik kutular için o anki seçimi öğrenmenin en kolay yolu budur. Liste kutusunda kaçıncı maddenin seçilmiş olduğunu öğrenmek için GetCurSel üye fonksiyonunu da kullanabilirsiniz.

 

      Liste kutusunda belli bir konumdaki karakter katarını almak için GetLBText üye fonksiyonunu kullanın. GetLBText fonksiyonunun iki parametresi vardır. Liste sıra numarası ve karakter katarını saklayacak olan bir CString üye değişkeni.

 

        m_combo.GetLBText( 1, szChoice);

 

Bileşik Kutuda Bir Maddeyi Arama

 

      FindString ve FindStringExact üye fonksiyonlarını kullanarak bir bileşik kutuda belli bir karakter katarını arayabilirsiniz. FindString verilen karakter katarıyla başlayan bir madde arar.

 

      int index = m_comboBox.FindString ( -1, szSearch);

 

      FindString fonksiyonunun iki parametresi vardır. Aramanın başlayacağı yeri gösteren bir sıra numarası ve aranacak öneki içeren bir karakter katarı. Sıra numarası aranacak ilk maddeden önceki sıra numarasını gösterir, bu nedenle arama işlemini baştan başlatmak için sıra numarası olarak –1 göndermeniz gerekir.

 

      FindStringExact fonksiyonu bileşik kutuda aranacak karakter katarının aynısını arar ve FindStirng fonksiyonundaki parametrelerin aynısını kullanır.

 

      int index = m_comboBox.FindString Exact( -1, szSearch);

 

            FindString ve FindStringExact fonksiyonları aranan katarın bulunduğu ilk maddenin sıra numarasını, eğer madde bulunamazsa CB_ERR mesajını döndürür.

Spin Kontrolü

 

      Çoğu zaman yukarı-aşağı kontrolü de denilen spin kontrolü, bir kaydırma çubuğunun uçlarındaki okları andıran ama onlardan daha küçük bir çift oktur. Spin kontrolleri genellikle spin kontrolüyle ilişkilendirilmiş bir başka kontrolün değerini ayarlamak için kullanılır.

 

      Spin kontrolüyle eşleşen kontrol arkadaş kontrol (buddy control) olarak bilinir. Bu normal bir düzenleme kontrolüdür.

 

      Bir spin kontrolü yatay olarak da durabilir. Yatay bir spin kontrolüne sol-sağ kontolü denmez; Kontrolün ismi aynı kalır.

 

      Varsayım olarak, yukarı oka tıklamak arkadaş kontrolün değerini azaltır, aşağı oku tıklamakta arkadaş kontrolün içerdiği değeri artırır. Yukarı ve aşağı oklar bir kelime-işleme dokümanındaki bir kaydırma çubuğu gibi çalışır.

 

      Spin kontrolleri kullanıcının bir grup değeri kaydırarak görebileceği durumlarda idealdir. Kullanıcı değerleri yalnızca birkaç birim birden ayarlayabilirse spin kontrolü mükemmeldir çünkü kullanıcının yalnızca birkaç fare tıklamasıyla yeni bir değer seçmesini mümkün olur.

 

      Bir spin kontrolü kullanmak çok kolaydır. Spin kontrolünün varsayılan işlevini kullanmak için hiç kod yazmanız gerekmez! Spin kontrollerinin en gelişmiş kullanımları bile yalnızca birkaç satırlık kod gerektirir. Kodun çoğunu ClassWizard yazar.

 

Kaydıraç Kontrolü

 

      Kaydıraç kontrolü (slider control) iki nokta arasında haraket ettirebileceğiniz. Bir kaydırma çubuğu içeren bir kontroldür. Windows Control Panel’deki (Denetim Masası) Display(Görüntü) kısmında bir kaydıraç kontrolü kullanılmaktadır. Settings (Ayarlar) sekmesi ekran çözünürlüğünü ayarlamak için bir kaydıraç kullanır.

 

      Kullanıcı kaydıracı fare ile sürükleyerek veya kaydıraca odaklanıp klavyedeki ok tuşlarını kullanarak kaydıracı hareket ettirir. Kullanıcının kaydıraç çubuğunun konumunu kolaylıkla anlayabilmesine yardımcı olacak çentik işaretleri içeren kaydıraçlar yaratabilirsiniz.

 

İlerleme Çubuğu Kontrolü

 

      İlerleme çubğu (progress bar) bir işlemin ilerleyişini göstermek için kullanılır ve işlem tamamlandıkça genelde soldan sağa doğru dolar.

 

      Developer Studio’da ilerleme çubukları bir projenin kaydedilme veya yüklenme işlemlerinin ilerleyişini göstermek için kullanılır. İlerleme çubukları Windows Explorer’da dosya kopyalama veya taşıma işlemi sırasında kullanılır.

 

 

 

 

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Google+ fotoğrafı

Google+ hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Connecting to %s