Csharp ile Windows Programlama (5) - Pencrele Özellikleri - C# Webmaster bilgi bankası, knowledge base Webmaster Araçları

AnaSayfa > C# > Csharp ile Windows Programlama (5) - Pencrele Özellikleri
Kategori: C#
Gönderen: Admin
Tarih: 2008-11-11
Puan: 7   Puan:7 | Katılımcı:4 | Katılımcı : 4
Okunma: 6087
  
 
1 puan 2 puan 3 puan 4 puan 5 puan 6 puan 7 puan 8 puan 9 puan 10 puan

Pencere özellikleri aynı sınıflara uygulanan özellikler gibi pencere hakkında bilgi tutan alanlardır. Windows programlama içerisinde pencere özellikleri herhangi bir değer alabilecek şekilde ayarlanabilirken bu özelliklerin adları bir karakter katarı ile belirlenir.

Pencere özellikleri genelde altsınıflanmış pencereler ya da MDI programları için kullanılır. Aslında pencere özellikleri kullanmak yerine pencere için ayrılmış ekstra byte içine de yazılabilir. Ancak açılan pencerenin ekstra byte olarak belirlenen alanın ne kadar büyüklükte olduğunu bilmemesi nedeniyle ekstra byte yerine pencere özelliklerinin kullanılması tavsiye edilir.

SetProp() fonksiyonu bir pencere için özellik atama işleminde kullanılır. Atama işlemi sırasında karakter katarı olarak belirtilen alan adı ve gönderilecek değer fonksiyona iletilir. Aynı şekilde bir pencereye atanmış özelliğin alınması için de GetProp() fonksiyonu kullanılır. RemoveProp() fonksiyonu ise SetProp() ile bir pencereye atanmış özellik silinebilir. Ancak bu silme işlemi pencere için atanmış veriyi değil, pencere ile verinin bağlantısını siler. Bu nedenle veri hala başka pencerelere atanmak üzere kayıtlı olarak durur.

  EnumProps() ve EnumPropsEx() fonksiyonları ile bir pencere atanmış tüm özellikleri sıralanabilir.



MFC – MICROSOFT FOUNDATION CLASS



Aslında şu ana kadar Windows programlama ile ilgili olarak anlatılanların tamamı direk olarak C++ dili kullanılarak, programcının tüm sınıflarını kendisinin yazmış olduğu programları anlatır. Tabi bu şekilde yazılım gerçekleştirmek ciddi anlamda kod içerirken sık yapılan hataları da beraberinde getiriyordu.

Gerçekte Windows işletim sistemi üzerinde yazılım geliştirme ile ilgili olarak biraz daha gerilere gidersek, bildiğim kadarıyla Microsoft Windows 1.0 işletim sistemini 1985 yılında piyasaya sürmüştü. Bu aşamadan sonraki en büyük değişiklikler 1993 yılında WinNT ve 1995 yılında da 16-bit yazılımlardan bizleri 32-bit yazılımlara taşıyan Win95 işletim sistemlerinin çıkışı olmuştur. Windows 1.0 işletim sistemi üzerinde programlama yapmak, temelde sistemin sunmuş olduğu API’leri kullanarak C dili ile yazılım gerçekleştirmek anlamına geliyordu. Dll olarak tasarlanmış üç API Kütüphanesi yazılımcıların kullanımına sunulmuştu: KERNEL, USER, GDI. Yazılımcılara sunulan bu üç kütüphanenin adları aslında her şeyi açıklar durumdadır.

Kernel; sistemin iç işleyişini idare eden, temel giriş çıkış işlemleri yapan, kaynak ve bellek yönetimi ile ilgilenen muhtelif sayıda API içeriyordu.

User; adı üzerinde kullanıcı ilişkilerini belirleyen, kullanıcıdan giriş almayı ve alınan girişlere yanıt vermeyi hedefleyen temel düzeydeki API’leri içeriyordu.

GDI; temelde sistemin grafik arayüzünü belirleyen, görüntüleme ve hatta yazdırma işlemlerini yapan API’leri içeriyordu. Windows 1.0 üzerinde başlayan bu temel mantık bugün hala kullanılmaktadır.

Uzun yıllar programcılar, C dilini ve işletim sisteminin sağladığı API’leri kullanarak programlar yazmaya çalışmıştır. Tabi bu şekilde kod yazarak bir Windows programı tasarlamak bugün için hala mümkündür. Eski alışkanlıkları olan (ve gerçekten ciddi anlamda yaşlı olan) programcılar bugünün şartlarında bu alışkanlıklarından vazgeçmeden program tasarlamaya devam ediyor olabilirler. Aslında bu şekilde kod yazmak çok ciddi anlamda kod içerir. Sebebi; teknik olarak C dilinin sadece prosedürsel yapıyı desteklemesi, sistemin temelde programcıyı düşünen mantalitesinin zayıf oluşu ve aynı zamanda tekrar kullanılabilen kod yapısını (bileşen mimarisi) desteklememesinden kaynaklanır.

Microsoft firmasının o gün içinde bugün içinde temel hedefi aslında kullanıcı arabirimleri yaratabilmek ve bunları bir Windows programcısı için çok basit hale getirebilmek, tekrar kullanılabilen kod yapılarını mükemmel çalışabilen şekilde tasarlamaktır.

Sanıyorum bu noktada Windows İşletim sistemi için ilk önemli adım C++ dilinin 1989 yılındaki evriminden sonra Microsoft firmasının 1992 yılında MFC denilen Microsoft Kurulum Sınıfı’nı Programmers Workbench olarak anılan yapının bir parçası olarak duyurmasıydı. Hatırladığım kadarıyla 50’nin üzerinde sınıf barındıran bu yapı, sistemin 16-bitlik kullanıcı arabirim API’lerini sarmalayan (wrappers) programcı için hazır sınıflar barındırıyordu. Bu gün sanırım 8.0 versiyonu bulunan MFC 200’ün üzerinde kullanıma hazır sınıf barındırır. Gerçi hala MFC kullanarak program yazan programcıların olup olmadığını bilmiyorum ama programcıların eski MFC programlarını .Net Framework’a taşıyabilmek adına çok yoğun çaba sarf ettiklerine bizzat şahidim.

Eğer uzun yıllardır Windows Programları yazıyorsanız ve bu programları C++ ile yazıyorsanız kesinlikle bir MFC programcısı olduğunuzu söyleyebilirim. Programcıları önemli dertlerden kurtaran, genişletilebilir sınıflar sağlayan bu yapı uzun süre yardımcımız olmuştur. Tabi gerçekten Nesne Yönelimli Programlamayı yüzde yüz oranında desteklememesinden ve zayıf tasarımından dolayı bu yapıyı sevmeyen büyük programcılarda (bakınız Charles Petzold) olmasına rağmen MFC uzun yıllar (ortamala 10-12 yıl) boyunca Windows Programlamanın temelini oluşturmuştur. Hatta Borland firmasının MFC’ye rakip olarak OWL isimli Object Windows Library bir sınıfı piyasaya sunduğunu hatırlıyorum. Her ne kadar sistem üzerinden çok etkili olmasa bile bu sınıf kütüphanesi de programcılık açısından önemli bilgiler içeriyordu.

Aslında Windows Programcılığı Visual Basic dilinin geliştirilmesi ile biraz daha basitleşti. Tabi uzun yıllara ortalığı kasıp kavuran Delphi dilini de unutmamak gerekir. C# dilinin çıkışı ile eksi bir Delphi programcısı olarak bu dilin yavaş yavaş yok oluşunu seyretmek hakikatten üzücü.

MFC programcılığı, .Net ortamının çıkışı ile artık nispeten kullanılmaz durumdadır. İki yapıyı karşılaştırdığımızda .Net Framework’ün temelde inanılmaz bir tasarım olduğunu, Nesne Yönelimli Programlamaya verdiği tam destek ve Web desteği sayesinde MFC’nin çok önünde olduğunu açıkça görüyoruz. Bu nedenle bu noktaya kadar anlatılanları .Net ortamında yazacağınız Windows Programları için bilmeseniz de olur. Ancak işleyen sistem bilgisi çok önemlidir. Geliştirilen kodların tam olarak ne yapacağını bilmek bir programcının asli görevidir. Tabi salt piyasa programcısı olmak isteyenler için gerçekten bugün her şeyin temeli olan Nesne Yönelimli Programlanın öğrenilmesi bile gereksizdir. Microsoft firmasının ve üçüncü parti firmaların sunmuş olduğu bileşenler kullanılarak bugün için hemen her türden Windows programı yazılabilir durumdadır. Ancak gerçekten programcı olmak yazara sorulduğunda, gerektiğinde kendi bileşenlerini geliştirebilmek ve yazılan kodun tam manasıyla ne yaptığını bilmektir. Tüm bunları anlayabilmek için ve istenilen kodları geliştirebilmek geçmişi ve işleyen sistemin içyapısını bilmekten geçer. Burada anlatılanlar, genelde temel bilgidir. Konu ile daha fazla ilgilenmek isteyen programcılar, detaylı aramalarını sürdürmelidirler.




Yorumlar
Henüz Kimse Yorum Yapmamış, ilk yorumu siz ekleyin!
Yorum Ekleme Aparatı
Yorum Eklemek için lütfen sol menuden giris yapınız..
Toplam 0 yorum listelendi.