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

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

Sistem içersinde açılan pencereler birbirinden farklı özelliklere sahip olabilir. Bu nedenle bu pencereler ayrı kategorilere dâhil edilirler. Sırasıyla pencere çeşitlerini inceleyelim.



Overlapped (üst üste binen) Pencereler; bu aslında masaüstünde açmış olduğumuz ve birbiri üzerinde görüntülenerek aktif duruma getirilen temel pencerelerdir. Aynı zamanda ana form olarak da anılırlar. Şekil 2.1 de görüntülenen form overlapped pencere olarak belirtilen pencerelere örnektir.



; Pop-Up Pencereler; genelde ShowDialog metodu ile açılan pencerelerdir. Bu pencere sınıfına diyalog kutuları ve mesaj kutuları dâhildir. Ana form üzerinde açılan ve kullanıcıya bir mesaj vermek ya da kullanıcının bir tercih yapmasını sağlamak amacıyla kullanılan pencere tipidir. Bu tipte bir pencere yaratmak için CreateWindowEx() fonksiyonuna WS_POPUP stili aktarılır. Yaratılan pencereye ait bir başlık çubuğunda oluşturulmak isteniyorsa WS_CAPTION yine aynı fonksiyona aktarılır.



Alt (Child) Pencereler; bu pencere stili genelde MDI programlarında kullanılan alt formları yaratmak için belirtilir. CreateWindowEx() fonksiyonuna WS_CHILD stili aktarılarak pencere alt form olarak açılabilir. Elbette ki yaratılan alt formlara ait bir ana form bulunması zorunludur. Bu nedenle yaratılama esnasında belirtilen fonksiyona ana pencere hangi pencere olduğu aktarılır. Eğer yaratılacak sınıf WS_CHILD olarak belirtilir ve ana form belirtilemezse sistem pencereyi yaratmayacaktır.

Alt formun boyutları ise, ana formdan büyük olduğu takdirde ana form için sistem otomatik olarak yatay ve dikey kaydırma çubukları oluşturacaktır. Alt formun herhangi bir parçası hiçbir şekilde ana formun dışında bir noktada görüntülenmeyecektir.

Alt formların yapısı gereği ana formlara gönderilen mesajlar da alt formları etkileyecektir. Örnek olarak ana formun yok edilmesi önce alt formun (ya da formların) yok edilmesini sağlayacaktır. Ya da ana formun gizlenmesi önce alt formun gizlenmesine, ekranda yer değiştirilmesi önce alt formun yer değiştirmesine neden olacaktır.

İlginç bir şekilde bir alt form istendiği anda alt form olmaktan çıkarılabilir. Böyle bir mesaj gönderildiğin anda alt form otomatik olarak daha önceki ana formun dışında bir noktada görüntülenerek ana form olarak değerlendirilir. Bu işlem SetParent() fonksiyonuna alt form için null değerinin atanması ile gerçekleştirilir. Aynı zamanda SetParent() metodu ile istenirse ana form değiştirilebilir.

Tüm bunlara ek olarak alt formlar içinde de alt form oluşturulabilir. Bu sayı istenildiği kadar arttırılabilir. Ve ayrıca alt formlara gönderilen sistem mesajları direk olarak alt formlara gönderilir. Herhangi bir şekilde bu mesajlar ana form üzerinden geçerek alt formlara gönderilmez. MDI programları daha sonra ayrıca incelenecektir.



Katmanlı (layered) Pencereler; genellikle çok fazla sayıda görsel içerik bulunduran bu nedenle sistem tarafından boyanmak için çok fazla zaman ve işlem gerektiren formları, performans artışı için bu şekilde tanımlayabilirsiniz. Bir katmanlı pencere oluşturmak için CreateWindowEx() fonksiyonuna WS_EX_LAYERED pencere stili olarak gönderilir. Ya da pencere yaratıldıktan sonra SetWindowLong() fonksiyonuna aynı pencere stili gönderilerek yaratılan pencerenin stili katmanlı olarak ayarlanabilir.



Mesaj Pencereleri; herhangi bir şekilde görünen bir penceresi olmayan ve sadece sistem mesajlarını almak ve sisteme mesaj yollamak için kullanılan pencerelerdir. Bu tipte bir pencere yaratmak için HWND_MESSAGE sabiti CreateWindowEx() fonksiyonuna gönderilir. Mesaj pencereleri Broadcast mesajları almazlar.



Pencere İlişkileri:



  Yaratılan pencereler genelde sistem içerisinde tek başlarına olmadıkları için yaratılan diğer pencerelerle mutlaka bir ilişkileri vardır. Bu nedenle açık olan diğer pencerelerle herhangi bir pencerenin ilişkisi sistem içerisinde sınıflandırılmıştır. Pencereler Ön Plan, Arka Plan ve Sahibi Bulunan (Owned) pencereler olarak sınıflandırılır.



Ön ve Arka Plan Pencereleri; Sistem içerisinde bulunan kanalların yaratmış olduğu pencereler, çalışan kanalın ön plan kanal olması halinde ön plan penceresi, kanalın arka plan kanalı olması halinde arka plan penceresi olarak yorumlanır. Ön plan kanallar işlemci zamanından daha fazla kullanırken, arka plan kanalları daha az zaman kullanırlar. Bu nedenle ön plan pencereleri, arka plan pencerelerine göre daha fazla işlemci zamanı kullanmış olurlar.

Sahibi Bulunan Pencereler; tüm alt formlar bu kategoriye girerler. Aynı zamanda kimi overlapped ve pop-up pencerelerde bu kategoriye girebilirler. Diyalog kutuları ve mesaj kutularıda bu kategoriye dâhildir.

Z-Order; pencerelerin ekranda üst üste gelmesi esnasında görüntülenme sırasına Z-Order denir. Z-Order sırasında en üstte olan pencere otomatik olarak diğer pencerelerin üstünde görüntülenir. Bu nedenle aktif pencereler direk olarak en üst sıradadır. Aynı şekilde yeni açılan bir pencere de en üst sıraya getirilir. Alt formlarda ise, bir ana forma bağlı olarak açılan tüm alt formlar kendi içlerinde ayrı bir Z-Order sırasına sahip olular. Sistemin masaüstündeki Z-Order sırasına alt formlar dahil değildir. Ancak ve ancak ana formları aktif duruma getirildiğinden ana form Z-Order sırasında en üste çıkar ve alt formlar yine kendi içlerinde ayrı bir Z-Order sırasına sahip olurlar. SetWindowPos() ve DeferWindowPos() fonksiyonları kullanılarak Z-Order sırası değiştirilebilir. GetTopWindow() fonksiyonu sıra içerisinde en üstte olan pencerenin handle numarasını döndürür. GetNextWindow() fonksiyonuda bir sonraki pencerenin handle numarasını döndürür.



Pencere Durumları:



  Açılan her pencere 9 farklı durumda olabilir. Aktif, aktif olmayan (inactive), kullanılamaz (disabled), kullanılabilir (enabled), saklı (hidden), görünür (visible) simge durumunda, tam ekran ve normal boyut (restored) olabilir.



Aktif pencereler; Z-Order sırasında en üstte olan ve kullanıcının giriş yaptığı ve ya girişini beklediği pencerelerdir. Sistem içerisinde aynı anda sadece bir pencere aktif olabilir. GetActiveWindow() fonksiyonu kullanılarak aktif pencerenin handle numarası alınabilir.

Aktif olmayan pencereler; sistem içersinde açık olan fakat Z-Order sırasında en üstte olamayan altta bekleyen pencerelerdir.

Kullanılamaz (disabled) pencereler; sistem tarafından, aktif durumda olsa bile kullanılamaz duruma getirilebilen, kullanıcı girişi alamayan ve/veya kullanıcı hareketlerine yanıt vermeyen pencerelerdir. Bu pencereler kullanıcı girişine izin vermese bile sistemden ve/veya diğer programlardan mesaj alabilir ve bu merkezlere mesaj gönderebilirler. Genellikle pencereler üzerindeki kontrollere uygulanan bu özellik direk olarak formun kendisine de uygulanabilir. EnableWindow() fonksiyonu kullanılarak bir pencere kullanılamaz duruma getirilebilir.

  İlginç bir şekilde bir ana formun alt formu kullanılamaz hale getirilmişse, bu forma uygulanan tüm fare hareketleri sistem tarafından ana forma yönlendirilir.

Kullanılabilir (enabled) pencereler; açılan tüm pencereler varsayılan olarak kullanılabilir durumdadır. Yine EnabledWindow() fonksiyonu kullanılarak kullanılamaz hale getirilen pencere kullanılabilir duruma getirilebilir. Konu ile ilgili bir çalışma örnek kodlar arasında bulunabilir.

  Saklı (hidden) pencereler; program tarafından yaratılan ancak saklı olarak belirtildiği için sistem tarafından boyanmayan ve bu nedenle görüntülenmeyen pencerelerdir. Saklı pencereler aynı zamanda kullanılamaz (disabled) pencere olarak yorumlanır. Ekranda görüntülenmeyen pencere kullanıcı girişi alamaz ve kullanıcı girişlerine yanıt veremez durumdadır.

Ana formu saklı olan tüm alt formlar saklı olarak belirtilmemiş olsalar bile, ana forma bağlı olduklarından dolayı onlarda saklı olarak belirtilerek görüntülenmezler.

Bütün bunlara ek olarak simge durumuna küçültülen pencerelerde nispeten saklı olarak yorumlanabilir.

Görünür (visible) pencereler; varsayılan olarak program tarafından yaratılan ve sistem tarafından görüntülen tüm formlar bu kategoriye girerler. Bir form yaratmanın amacı ekseriyetle kullanıcı girişi almaktır.

Simge durumuna küçültülmüş pencereler; kullanıcı tarafından form üzerinde uygun noktaya tıklanması sonucu görev çubuğuna indirilen pencerelerdir.

Tam ekran pencereler; yine kullanıcı tarafından uygun noktaya tıklanması ile tüm ekranı (görev çubuğunun durumuna göre) kaplayacak şekilde büyültülmüş pencerelerdir.

Normal boyut pencereler; açıldığı anda program tarafından belirlenen piksel ölçülerinde görüntülenen pencerelerdir.



Pencere Animasyonu:



Yaratılan pencerelerin görüntülenmesi ve yok edilmesi esnasında sistem içerisinde belirtilen özel efektler pencereye uygulanabilir. AnimateWindow() fonksiyonu kullanılarak bu işlem gerçekleştirilebilir. AW_SLIDE bayrağı kullanılarak pencere kaydırılarak, AW_BLEND gitgide transparan hale getirilerek, AW_CENTER bayrağı kullanılarak ortadan dışa ya da dıştan ortaya doğru görüntüden çıkarılır ya da görüntülenir. Konu ile ilgili çalışma örnek kodlar arasında bulunabilir.



Pencerenin Yok Edilmesi:



Genel anlamda bir program yaratmış olduğu tüm pencereleri yok etmek zorundadır. Yaratılma işlemi sırasında önce istemci olmayan alan yaratılıp daha sonra istemci alanı yaratılırken, yok edilme direk olarak gerçekleşir. DestroyWindow() fonksiyonu kullanılarak pencere kapatılır. Pencere kapatma komutu gönderildiğinde program, önce pencereyi görüntüden yok eder daha sonra handle numarasını yok eder en sonunda da pencere ile ilişkili olan tüm kaynakları (resources) yok eder. Eğer program pencere ile ilişkili verileri yok etmezse sistem programın yerine bu kaynakları kendi yok edecektir.

Bir pencerenin yok edilmesi kayıt edilmiş pencere sınıfının sistemden silinmesi anlamına gelmez. Programlar aynı pencere sınıfından yine yeni pencereler yaratabilir.

Aynı zamanda bir ana formun yok edilmesi, formu yaratan kanalın yok edilmesi anlamına geldiği için program kapatılır. Bu aşamada ana forma bağlı olan tüm alt formlarda kapatılır.






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.