Windows
95' den başlayarak Windows XP' ye uzanan zincir ve Windows NT türevleri, kişisel
bilgisayarlar için Microsoft Windows işletim sisteminin 32 bit sürümleridir.
Şu an büyük çoğunluk 32 bit işletim sistemlerinde yoğunlaşmaktadır.
Win32 API
Windows'un 32 bit sürümlerinin aynı dilde yazıldığını söyleyebiliriz. Bütün hepsi, herkes
tarafından Win API olarak bilinen Application Programming Interface' e dayanır.
Win API' nin 16 bit sürümleri de vardır, ancak Windows 95, Windows 98 Windows
NT Win32 API ya da kısaca Win32 olarak bilinen 32 bitlik sürümü kullanırlar.
Win32 API nedir? API, birkaç yüz fonksiyonun artı birçok değişmezin, makronun,
structların, tiplerin ve diğer öğelerin toplamıdır. Bu öğeler windows programları
tarafından kullanılır. Bu programlama öğeleri, C programlama dilinde yazılmıştır.
API' nin çoğu, Windows.h olarak adlandırılmış bir dosyada tanımlanmıştır. Bu
dosya, Visual C++ da dahil olmak üzere, windows için birçok programlama ortamıyla
gelir.
Windows
Programlamada En Az Bilinmesi Gerekenler
Kendinizi bilgisayarın önünde oturup, belki de Microsoft Word' u kullanırken
hayal edin. Bir dakika fareye ya da klavyeye dokunmadan oturun. Çok fazla bir
şey olmuyor, değil mi? Düzeltme imi, yani metninizin ekleme noktasındaki yanıp
sönen imleç, yanıp söner.
Şimdi yazmayı deneyin. Klavyede yazdığınız yeni metin, düzeltme imi konumunda
görüntülenir. Sonra, fareyle metin seçin. Metin vurgulanır. Araç çubuğunda kalın
düğmesini tıklayın. Seçili metin kalın stil baskısıyla yeniden yazılır. Bu işlemlerin
her birine event yani olay denir.
Olaylar
Microsoft Windows, kullanıcı tarafından yönetilen bir sistemdir, yani
yürütme zamanın çoğunu kullanıcının bir şey yapıp ona yanıt vermek için bekleyen
bir sistemdir. Kullanıcı bir tuşa bastığında, fareyi oynattığında ya da
farenin düğmesine bastığında, bilgisayar donanımı, Windows'a bir olay olduğunu, nasıl
bir olay olduğunu, ne zaman olduğunu ve ekrana oranla ne oranda olduğunu bildirir.
Olaylar üç yoldan biriyle oluşur:
1.Fare
ve klavye gibi girdi aygıtları aracılığıyla olur.
2.Menü,
araç çubuğu, kaydırma çubukları ve iletişim kutularındaki denetimler gibi ekrandaki
görsel nesneler aracılığıyla olur.
3.Örneğin,
bir pencere tarafından örtülen bir pencerenin birden ortaya çıkmasında olduğu
gibi, Windows' un kendisinden, içindendir.
Windows
programa bu olayların yapılması gerektiğini nasıl bildirir? İletiler aracılığıyla.
İletiler
Windows az önce açıkladığım olaylar gibi olayların haberini aldığında bir
ileti( message) oluşturur. İletiye eşlik etmesi için ilgili bilgiyi( konum ve
zaman gibi) bir veri yapısında bir araya toplar ve iletiyi uygun programa
gönderir. Windows'taki iletiler, windows.h dosyasında( ya da windows.h' ın içerdiği dosyalardan
birinde) makrolarla tanımlanan değişmezlerdir. İleti sabitleri WM_XXX biçimindedirler.
Örneğin WM_CHAR, WM_LBUTTONDOWN, WM_COMMAND.
Windows, uygulama iletiyi alıp işlemeye hazır olana kadar diğer askıdaki iletilerle
beklediği hedef uygulamanın ileti kuyruğuna sokar. 32 bit Windows sistemlerde,
her bir uygulamanın kendi ileti kuyruğu vardır.
İleti
Kuyruğu
Uygulamanın içinde bir ileti döngüsü( message loop) vardır. Kodda bu aşağıdakine
benzer: While(GetMessage(&msg,NULL,0,0)
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
Bu küçük döngü uygulamanın ileti kuyruğundan aldığı ile WM_QUIT olmadığı sürece
işlemeyi sürdürür. O ileti döngünün bitmesine neden olur. Çünkü GetMessage,
WM_QUIT iletisi gördüğünde iletiyi almak için Win32 API işlevi olan GetMessage
işlevini çağırır. Kuyrukta ileti yoksa, GetMessage orada oturur ve ileti gelmesini
bekler. GetMessage ileti verdiğinde, döngü onun klavyeden
gelip biraz ek iş gerçekleştirecek bir ileti olup olmadığını anlamak için, iletiyi
TranslateMessage işlevine aktarır. TranslateMessage, ham klavye iletilerini,
yazılan karakter hakkındaki kullanması kolay bilgileri açığa çıkarmak için tasarlanmış
WM_CHAR iletilerine döndürür. TranslateMessage, yazılan alfasayısal karakter
ve basılabilir simgelerden ayırır. TranslateMessage, klavyeden gelmeyen iletilere
hiçbir şey yapmaz. Son olarak, DispatchMessage işlevi, uygulamada hangi pencerenin(
birden fazlaysa) iletiyi alması gerektiğine ve hangisi üzerinden iletinin gönderilmesi
gerektiğine karar verir.
İleti
İşleyiciler
İletiyi alan uygulamanın içinde gelen iletiye ne olduğu, sizin, yani uygulama
programcısının ne yaptığına bağlıdır. İki temel olasılık vardır:
Handler(işleyici),
yani bir iletiyle başa çıkan bir kod yazdınız. İleti için işleyici varsa, iletiyi
işlemeyi işleyici kod yürütür.
İleti
için işleyici yazdınız. Bunun yerine, Windows' un her ne varsayılan işlemi
yapması gerekiyorsa, iletiyi Windows' a geri göndermeyi tercih ettiniz.
Geleneksel Windows
programlamasında, bunu DefWindowProc işlevini çağırarak yaparsınız.
MFC:
C++, OOP(Object Oriented Programming) ve Win32API' nin Müthiş Birleşimi
Microsoft Win32API' nin yüzlerce işlevi olduğundan, öğrenmek yıldırıcı olabilir.
C' de çalışıyorsanız, en az altı ay ile bir yıl arasında dik öğrenme eğrisine
güvenebilirsiniz.
Senelerce, Windows programlaması yapmanın standardı C dili olmuştur, ancak kısmen C++
dilinin nesne temelli olanakları ve kısmen MFC nedeniyle her geçen gün daha çok
programcı C++ diline kayıyor. MFC, Windows programlamayı kolaylaştırır ve diğer
türlü dikkate almayacağınız özellikleri ,uygulamanıza eklemenizi sağlayarak sizi
daha güçlü bir programcı yapar. Ancak MFC de o kadar değildir ve onu kullanmak
için Windows programlaması ve C++ 'ın öğrenme eğrilerini tırmanmanız gerekir.
Windows'un kendisi C ile yazılmış olsa da, onun yadsınamaz nesne yönelimi vardır. Windows
nesne temelli olduğundan, onu nesne temelli bir programla programlamak mantıklıdır.
Bu amaç için, C++, C' den çok daha iyidir. C++, gördüğümüz gibi nesneleri,
onların özellikleri ve davranışlarını simgelemek için güçlü araçlar olan sınıfları
içerir.
Sınıf
Kitaplığı
Doğrudan C++ ile Windows için programlama yapabilirsiniz. Ancak çok daha etkili
bir yaklaşım, sınıf kitaplığı kullanmaktır. MFC kitaplığı gibi bir sınıf kitaplığı,
temel Windows nesnelerini simgelemek için iyi tasarlanmış ve iyice sınanmış
sınıflar temin eder. Örneğin, pencereleri simgelemesi için CWnd sınıfı vardır
ve çerçevesi olan pencereleri simgelemesi için CFrameWnd sınıfı vardır. Ayrıca,
iletişim kutuları için CDialog, işlem düğme denetimleri için Cbutton, boya fırçaları
için CBrush gibi sınıflara ek olarak MFC 'nin 6.0 sürümü itibarıyla 200 üstünde
sınıfı vardır.
Makale:
Windows API' den MFC Sınıflarına C++ ve C++.NET dili Volkan Öner
|