Visual C++ ile Görsel Programlama - 7 (Win32)

Visual C++ ile Görsel Programlama (Resource ile Kolay Diyalog Kutusu yapımı)

Untitled Document

Visual C++ ile Görsel Programlama ( Hazır Diyalog Kutusu)

Eğer hızlı şekilde pencere ve üzerindeki düğme, resim vb. bileşenleri hazırlamak isterseniz. Diyalog kutusu kullanabilirsiniz

Öncelikle Visual C++ yı açıyoruz. File >> New diyoruz.

yukardaki seçimleri yaptıktan sonra ilk seçenek olan boş proje seçeneğini seçiyoruz.

Proje oluştuktan sonra sağ tarafta yeni bir beyaz sayfa oluşturuyoruz.

yazdığımız sayfayı kaydediyoruz.

Dosyayı kaydederken *.C yada *.CPP adı ile kaydediyoruz.

Daha sonra kaydettiğimiz sayfayı projeye ekliyoruz. sağ tarafta yazmak demek projeye eklemek demek değildir. diğer kaynaklar için de aynı kural geçerlidir. bir ikon yada menü hazırladığınızda onu projeye eklemelisiniz.

Alt kısımdan File View penceresine geçip Source Files kısmına sağ tıklayıp buraya Add Files to Folder diyoruz ve az önce kaydettiğimiz kodsayfasi.cpp dosyasını seçiyoruz.

kod sayfasına bu sayfanın en dibindeki kodları aynen kopyalayıp yapıştırın. Bundan sonra projemize diyalog kutusunu ekleyeceğiz. Diyalog kutusunu ekledikten sonra düzenlemek çok kolay olacaktır.

insert >> Resource diyerek Diyalog ekliyoruz.

Diyalog seçerek New(yeni) diyoruz

Diyalog kutusunu kaydediyoruz. Burada kaydedilen dosya Script.rc diye bir dosyadır. Bu dosya tüm Resource tipi dosyaları içinde barındırır. bunu projeye bir kez ekledikten sonra diğer resource tipindeki dosyaları projeye eklemeniz gerekmez. Resim, ikon, String tablosu gibi dosyalar script.rc içine kaydedildiği için projeye otomatik olarak eklenir.

Script.rc dosyasını kaydettikten sonra projeye ekliyoruz. ayrıca resource.h dosyası içinde de bazı tanımlamalar bulunduğu için bunu da Header Files kısmına ekliyoruz.

Source Files << Add Files To Folder << kodsayfası.cpp
Header Files << Add Files To Folder << resource.h
Resource Files << Add Files To Folder << script.rc

bunları ekledikten sonra dosyalar penceresi aşağıdaki gibi görünmelidir.

Eğer Diyalog kutusunda değişiklik yapmak isterseniz. soldaki pencerelerden alt kısımdan Resource seçeneğini seçip IDD_DIALOG1 isimli diyalog kutusuna çift tıklıyoruz.

Buradaki düzenleme araçları ile diyalog kutusunun boyunu, özelliklerini, düğmelerin üzerindeki yazı gibi özellikleri değiştirebilirsiniz.

 

Diyalog kutusunu ekrana çıkartmak için kullanılan komut DialogBox komutudur.

DialogBox (instance , kaynak_ID , Ana_hwnd , Mesaj_döngüsü);

Eğer hazır çizilmiş bir diyalog kullanılacaksa MAKEINTRESOURCE(ID_KAYNAK) komutu ile kaynak diyalog adı yazılır. Burdaki instance ve ana pencerenin hwnd numarası sabit olarak programda tektir. tanımlamamız gereken sadece mesaj döngüsüdür. BOOL CALLBACK fonksiyonu bu pencereden gelen her türlü mesajı alıp kullanmamızı sağlayacaktır. switch(msg) ile mesajı alırız. case WM_COMMAND aktif olmuşsa düğmeye basılma mesajı gelmiştir. eğer mesaj case WM_CLOSE: ise pencerede sağ köşedeki çarpıya basılmış demektir.

bizim hazırladığımız pencerede iki düğme olduğu için düğme basıldı mesajı gelince bu mesajı da ayırmamız gerekir. switch (LOWORD(wParam)) mesajın parametrelerinden biri olan wParametre`sini incelememizi sağlar. Eğer bu parametre IDOK ise birinci düğme. IDCANCEL ise ikinci düğme basılmıştır.

 

 

 

#include #include "resource.h" // ana mesaj döngü fonksiyonu --> tüm mesajlar bu fonksiyondan geçecektir
static BOOL CALLBACK DialogFunc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) { switch (msg) {
case WM_COMMAND: //düğmeye basıldı mesajı
//hangi düğme olduğunu anlamak için mesajın alt parametresine bakıyoruz
switch (LOWORD(wParam)) {
case IDOK: // ilk düğme EndDialog(hwndDlg,1); return 1;
case IDCANCEL: // ikinci düğme EndDialog(hwndDlg,0); return 1; } break;
case WM_CLOSE: //pencere kapatıldı mesajı gelirse EndDialog(hwndDlg,0); //pencereyi kapat
return TRUE; }
return FALSE; } //program girişi ana fonksiyon
int APIENTRY WinMain(HINSTANCE hinst, HINSTANCE hinstPrev, LPSTR lpCmdLine, int nCmdShow) {
return DialogBox(hinst, MAKEINTRESOURCE(IDD_DIALOG1), NULL, (DLGPROC) DialogFunc); }

 

Ekleyen: drekon

Kapalı

Topic closed automatically because it`s been more than a year!