Merhaba değerli forum sakinleri, sevgili @Maveraün Nehr hocamızın isteğiyle bu konumda C++ dilinde GUI ile kodlamanın nasıl yapılacağına dair bir rehber sunacağım. Bu konuda Visual Studio 2022 kullanacağım.
Proje Oluşturma
Visual Studioyu başlattıktan sonra karşımıza gelen başlama ekranında yeni proje oluştur diyerek başlayalım, ardından Windows Masaüstü Sihirbazı seçeneğini seçiniz.
Ardından proje için özellikleri vs. ayarlayın. Aşağıdaki Windows Masaüstü Uygulaması diye gözüküyor arada öyle oluyor vsde bende, çözümünü bulamadım önemsemeyin siz yine de
Ardından aşağıdaki ekran gelecek karşınıza, burada benim ayarladığım şekilde ayarlayın.
Ardından kodun falan olmadığı boş bir ekran gelecek. Her şeyi biz ayarlayacağız. Aşağıdaki şekilde yeni dosya oluşturacağız. Kod dosyamız.
Ardından gelen ekranda .cpp dosyasını seçin.
Şimdi sırayla kodu yazalım. Öncelikle burada normal windows APIsini kullanacağım o yüzden windows.h ekleyelim.
Kod kısmında çok detaylı değinmeyeceğim çünkü GUI oluştururken farklı kütüphaneler de görebilirsiniz. Aşağıdaki kodumuz penceredeki yönetimi işleyen CALLBACK fonksiyonumuz. pencere adındaki fonksiyon.
Aşağıdaki kodumuz penceredeki olaylarımızı sağlayacak sırayla değinelim. Buradaki "mesaj", pencerenize gönderilen bir Windows mesajını temsil ediyor bu arada. Pencere oluştuğunda (case ile sağlıyoruz) MessageBox fonksiyonu ile "pencere" penceresinde "Pencere başarıyla oluşturuldu." mesajını THTBilgi başlığındaki bir OK mesaj kutucuğu açılsın diyor. Burada MB_OK kullanıyoruz mesela. Burada tüm pencerelerin fonksiyonlarını anlatayım.
Şimdi ise ESC tuşuna basıldığında pencerenin kapanmasını sağlayan kodu yazalım.
VK_ESCAPE escape tuşunu temsil eder. Diğer tuşlar için Virtual-Key Codes (Winuser.h) - Win32 apps adresini ziyaret edebilirsiniz. PostQuitMessagedaki 0 durumu ile pencereyi kapatıyoruz.
Aşağıdaki kodumuzda ise pencere kapatıldığında threadden de kapatmayı sağlıyoruz. Hatta uygulamayı konsoldan çalıştırıp bu kod parçasını silip denerseniz terminalde işlemin sonlanmadığını görebilirsiniz.
Aşağıdaki kodumuzda default switch ifadesinde tanımlanan tüm diğer durumlar için geçerli olan "varsayılan" bir durumu belirtecek. Eğer mesaj parametresi, switch'te tanımlanan özel mesajlardan hiçbiriyle eşleşmezse, bu satır çalıştırılıyor. Mesela ESC yerine spacee bastınız diyelim, bu komut çalıştırılacak.
DefWindowProc, Windows'un bu mesajı işlemek için gerekli olan varsayılan işlemleri otomatik olarak yapar.Bu, pencerenin standarda uygun şekilde yanıt vermesini sağlar (örneğin, pencereyi taşımak, boyutlandırmak, vs.). Size bunu anlatmak için örneği buldum. Hani Windowsta bi işlem yaparken arkada silme gibi bir şey varsa öndeki ekranın arkasındaki ekranı taşıyamazsınız ya onun gibi özel bir durum tanımlandığında, o özel durumun olmadığı durumu temsil ediyoruz burada yani.
Sonunda ise return 0 diyoruz.
ŞİMDİ YENİ BİR BOYUTTAYIZ.
Evet bu fantastik geçişten sonra devam edelim. Aşağıdaki kod da başlangıç kodumuz.
Aşağıdaki kodumuzda pencere sınıfının adını atıyoruz.
Aşağıdaki kod configi sağlıyor ben bir şey girmedim.
Aşağıdaki kodlarda sırasıyla yöneticiyi, uygulamanın örneğini ve pencere sınıfının adını atıyoruz. Yani derleyiciye gösteriyoruz diyelim.
Ardından kaydedilemezse hata mesajı gelsin diye ekledik bu yapıyı.
Evet konu bu kadar, devamı ikinci konuda gelecek orada Win32 için olan temel uygulamayı bitirmeyi hedefliyorum. İyi forumlar.
Proje Oluşturma
Visual Studioyu başlattıktan sonra karşımıza gelen başlama ekranında yeni proje oluştur diyerek başlayalım, ardından Windows Masaüstü Sihirbazı seçeneğini seçiniz.
Ardından proje için özellikleri vs. ayarlayın. Aşağıdaki Windows Masaüstü Uygulaması diye gözüküyor arada öyle oluyor vsde bende, çözümünü bulamadım önemsemeyin siz yine de
Ardından kodun falan olmadığı boş bir ekran gelecek. Her şeyi biz ayarlayacağız. Aşağıdaki şekilde yeni dosya oluşturacağız. Kod dosyamız.
Ardından gelen ekranda .cpp dosyasını seçin.
Şimdi sırayla kodu yazalım. Öncelikle burada normal windows APIsini kullanacağım o yüzden windows.h ekleyelim.
Kod kısmında çok detaylı değinmeyeceğim çünkü GUI oluştururken farklı kütüphaneler de görebilirsiniz. Aşağıdaki kodumuz penceredeki yönetimi işleyen CALLBACK fonksiyonumuz. pencere adındaki fonksiyon.
Aşağıdaki kodumuz penceredeki olaylarımızı sağlayacak sırayla değinelim. Buradaki "mesaj", pencerenize gönderilen bir Windows mesajını temsil ediyor bu arada. Pencere oluştuğunda (case ile sağlıyoruz) MessageBox fonksiyonu ile "pencere" penceresinde "Pencere başarıyla oluşturuldu." mesajını THTBilgi başlığındaki bir OK mesaj kutucuğu açılsın diyor. Burada MB_OK kullanıyoruz mesela. Burada tüm pencerelerin fonksiyonlarını anlatayım.
- MB_OK: Sadece "Tamam" butonu.
- MB_OKCANCEL: "Tamam" ve "İptal" butonları.
- MB_ABORTRETRYIGNORE: "Abort", "Retry" ve "Ignore" butonları.
- MB_YESNO: "Evet" ve "Hayır" butonları.
- MB_YESNOCANCEL: "Evet", "Hayır" ve "İptal" butonları.
- MB_ICONINFORMATION: Bilgi simgesi.
- MB_ICONEXCLAMATION: Uyarı simgesi.
- MB_ICONERROR: Hata simgesi.
- MB_ICONQUESTION: Soru simgesi.
Şimdi ise ESC tuşuna basıldığında pencerenin kapanmasını sağlayan kodu yazalım.
VK_ESCAPE escape tuşunu temsil eder. Diğer tuşlar için Virtual-Key Codes (Winuser.h) - Win32 apps adresini ziyaret edebilirsiniz. PostQuitMessagedaki 0 durumu ile pencereyi kapatıyoruz.
Aşağıdaki kodumuzda ise pencere kapatıldığında threadden de kapatmayı sağlıyoruz. Hatta uygulamayı konsoldan çalıştırıp bu kod parçasını silip denerseniz terminalde işlemin sonlanmadığını görebilirsiniz.
Aşağıdaki kodumuzda default switch ifadesinde tanımlanan tüm diğer durumlar için geçerli olan "varsayılan" bir durumu belirtecek. Eğer mesaj parametresi, switch'te tanımlanan özel mesajlardan hiçbiriyle eşleşmezse, bu satır çalıştırılıyor. Mesela ESC yerine spacee bastınız diyelim, bu komut çalıştırılacak.
DefWindowProc, Windows'un bu mesajı işlemek için gerekli olan varsayılan işlemleri otomatik olarak yapar.Bu, pencerenin standarda uygun şekilde yanıt vermesini sağlar (örneğin, pencereyi taşımak, boyutlandırmak, vs.). Size bunu anlatmak için örneği buldum. Hani Windowsta bi işlem yaparken arkada silme gibi bir şey varsa öndeki ekranın arkasındaki ekranı taşıyamazsınız ya onun gibi özel bir durum tanımlandığında, o özel durumun olmadığı durumu temsil ediyoruz burada yani.
Sonunda ise return 0 diyoruz.
ŞİMDİ YENİ BİR BOYUTTAYIZ.
Evet bu fantastik geçişten sonra devam edelim. Aşağıdaki kod da başlangıç kodumuz.
Aşağıdaki kodumuzda pencere sınıfının adını atıyoruz.
Aşağıdaki kod configi sağlıyor ben bir şey girmedim.
Aşağıdaki kodlarda sırasıyla yöneticiyi, uygulamanın örneğini ve pencere sınıfının adını atıyoruz. Yani derleyiciye gösteriyoruz diyelim.
Ardından kaydedilemezse hata mesajı gelsin diye ekledik bu yapıyı.
Evet konu bu kadar, devamı ikinci konuda gelecek orada Win32 için olan temel uygulamayı bitirmeyi hedefliyorum. İyi forumlar.




