Aracılığıyla paylaş


Birden Çok Belge Arabirimi Hakkında

Çok belgeli arabirim (MDI) uygulamasındaki her belge, uygulamanın ana penceresinin istemci alanı içinde ayrı bir alt pencerede görüntülenir. Tipik MDI uygulamaları, kullanıcının birden çok metin belgesiyle çalışmasını sağlayan sözcük işleme uygulamalarını ve kullanıcının birden çok grafik ve elektronik tabloyla çalışmasını sağlayan elektronik tablo uygulamalarını içerir. Daha fazla bilgi için aşağıdaki konulara bakın.

Çerçeve, İstemci Penceresi ve Alt Pencereler

MDI uygulamasının üç tür penceresi vardır: çerçeve penceresi, MDI istemci penceresi ve bir dizi alt pencere. çerçeve penceresi, uygulamanın ana penceresi gibidir: boyutlandırma kenarlığına, başlık çubuğuna, pencere menüsüne, simge durumuna küçültme düğmesine ve ekranı büyütme düğmesine sahiptir. Uygulamanın çerçeve penceresi için bir pencere sınıfı kaydetmesi ve bunu desteklemek için bir pencere yordamı sağlaması gerekir.

MDI uygulaması, çerçeve penceresinin istemci alanında çıktıyı görüntülemez. Bunun yerine MDI istemci penceresini görüntüler. MDI istemci penceresi, MDICLIENT önceden kaydedilen pencere sınıfına ait özel bir alt pencere türüdür. İstemci penceresi çerçeve penceresinin alt öğesidir; alt pencereler için arka plan görevi görür. Ayrıca çocuk pencereleri oluşturma ve düzenleme için destek sağlar. Örneğin, bir MDI uygulaması alt pencereler oluşturabilir, etkinleştirebilir veya maksimum boyuta çıkarabilir; bunları MDI istemci penceresine ileti göndererek yapabilir.

Kullanıcı bir belge açtığında veya oluşturduğunda, istemci penceresi belge için bir alt pencere oluşturur. İstemci penceresi, uygulamadaki tüm MDI alt pencerelerinin üst penceresidir. Her bir alt pencerenin boyutlandırma kenarlığı, başlık çubuğu, pencere menüsü, simge durumuna küçültme düğmesi ve büyütme düğmesi vardır. Alt pencere kırpıldığı için istemci penceresinin içerisinde kalır ve dışında görünemez.

MDI uygulaması birden fazla belge türünü destekleyebilir. Örneğin, tipik bir elektronik tablo uygulaması kullanıcının hem grafiklerle hem de elektronik tablolarla çalışmasını sağlar. Desteklediği her belge türü için, MDI uygulamasının bir alt pencere sınıfı kaydetmesi ve bu sınıfa ait pencereleri desteklemek için bir pencere yordamı sağlaması gerekir. Pencere sınıfları hakkında daha fazla bilgi için bkz. Pencere Sınıfları. Pencere yordamları hakkında daha fazla bilgi için bkz. Pencere Yordamları.

Aşağıda tipik bir MDI uygulaması verilmiştir. Multipad olarak adlandırılır.

Çok yüzeyli mdi uygulama çerçevesi penceresinin ve istemci penceresinin ekran görüntüsü.

Alt Pencere Oluşturma

Bir alt pencere oluşturmak için, MDI uygulaması CreateMDIWindow işlevini çağırır veya WM_MDICREATE iletisini MDI istemci penceresine gönderir. MDI alt penceresi oluşturmanın daha verimli bir yolu, genişletilmiş WS_EX_MDICHILD stili belirterek CreateWindowEx işlevini çağırmaktır.

Bir alt pencereyi yok etmek için, MDI uygulaması MDI istemci penceresine bir WM_MDIDESTROY iletisi gönderir.

Alt Pencere Etkinleştirme

İstemci penceresinde herhangi bir anda herhangi bir sayıda alt pencere görüntülenebilir, ancak yalnızca biri etkin olabilir. Etkin alt pencere diğer tüm alt pencerelerin önüne yerleştirilir ve kenarlığı belirginleşir.

Kullanıcı etkin olmayan bir alt pencereyi tıklayarak etkinleştirebilir. MDI uygulaması, MDI istemci penceresine bir WM_MDIACTIVATE iletisi göndererek bir alt pencereyi etkinleştirir. İstemci penceresi bu iletiyi işlerken, etkinleştirilecek alt pencerenin pencere yordamına ve devre dışı bırakılan alt pencerenin pencere yordamına bir WM_MDIACTIVATE iletisi gönderir.

Alt pencerenin etkinleştirilmesini önlemek için, WM_NCACTIVATE iletisini alt pencerede işleyerek FALSEdeğerini döndürün.

Sistem, her alt pencerenin üst üste gelen pencereler yığınındaki konumunu izler. Bu yığınlama, Z-Orderolarak bilinir. Kullanıcı, etkin pencerede pencere menüsünden Sonraki tıklayarak Z sırasındaki bir sonraki alt pencereyi etkinleştirebilir. Uygulama, istemci penceresine bir WM_MDINEXT iletisi göndererek Z sırasında sonraki (veya önceki) alt pencereyi etkinleştirir.

Etkin alt pencereye tanıtıcıyı almak için MDI uygulaması, istemci penceresine WM_MDIGETACTIVE ileti gönderir.

Birden Çok Belge Menüsü

MDI uygulamasının çerçeve penceresi, pencere menüsü içeren bir menü çubuğu içermelidir. Pencere menüsü, istemci penceresinde alt pencereleri yerleştiren veya tüm alt pencereleri kapatan öğeleri içermelidir. Tipik bir MDI uygulamasının pencere menüsü aşağıdaki tablodaki öğeleri içerebilir.

Menü öğesi Amaç
Kutucuğu Alt pencereleri, her birinin istemci penceresinde tamamen görünecek şekilde kutucuk biçiminde düzenler.
Basamaklı Alt pencereleri kaskad biçiminde düzenler. Alt pencereler birbiriyle örtüşür, ancak her birinin başlık çubuğu görünür.
Simgeleri Düzenle İstemci penceresinin alt kısmında simge durumuna küçültülmüş alt pencerelerin simgelerini düzenler.
Hepsini Kapat Tüm alt pencereleri kapatır.

Bir alt pencere oluşturulduğunda, sistem otomatik olarak pencere menüsüne yeni bir menü öğesi ekler. Menü öğesinin metni, yeni alt pencerenin menü çubuğundaki metinle aynıdır. Kullanıcı, menü öğesine tıklayarak ilgili alt pencereyi etkinleştirebilir. Bir alt pencere yok edildiğinde, sistem ilgili menü öğesini pencere menüsünden otomatik olarak kaldırır.

Sistem, pencere menüsüne on adede kadar menü öğesi ekleyebilir. Onuncu alt pencere oluşturulduğunda, sistem pencere menüsüne Daha Fazla Pencere öğesini ekler. Bu öğeye tıklamak, Seç Penceresi iletişim kutusunu görüntüler. İletişim kutusu, kullanılabilir durumdaki tüm MDI alt pencerelerinin başlıklarını içeren bir liste kutusu içerir. Kullanıcı, liste kutusundaki alt pencereyi başlığına tıklayarak etkinleştirebilir.

MDI uygulamanız çeşitli alt pencere türlerini destekliyorsa, menü çubuğunu etkin pencereyle ilişkili işlemleri yansıtacak şekilde uyarlayın. Bunu yapmak için uygulamanın desteklediği her alt pencere türü için ayrı menü kaynakları sağlayın. Yeni bir alt pencere türü etkinleştirildiğinde, uygulama, istemci penceresine ilgili menünün tutamacını aktararak bir WM_MDISETMENU iletisi göndermelidir.

Alt pencere olmadığında, menü çubuğunda yalnızca belgeyi oluşturmak veya açmak için kullanılan öğeler bulunmalıdır.

Kullanıcı imleç tuşlarını kullanarak bir MDI uygulamasının menülerinde gezinirken, anahtarlar kullanıcının tipik bir uygulamanın menülerinde gezinmesinden farklı davranır. MDI uygulamasında denetim, uygulamanın pencere menüsünden etkin alt pencerenin pencere menüsüne ve ardından menü çubuğundaki ilk öğeye geçer.

Birden Çok Belge Hızlandırıcısı

Alt pencerelerinin hızlandırıcı anahtarlarını almak ve işlemek için, MDI uygulamasının ileti döngüsünde TranslateMDISysAccel işlevini içermesi gerekir. Döngü, TranslateAccelerator veya DispatchMessage işlevini çağırmadan önce TranslateMDISysAccel çağırmalıdır.

MDI alt penceresinin pencere menüsündeki hızlandırıcı tuşları, MDI olmayan alt pencerelerden farklıdır. MDI alt penceresinde ALT+ – (eksi) tuş bileşimi pencere menüsünü açar, CTRL+F4 tuş bileşimi etkin alt pencereyi kapatır ve CTRL+F6 tuş bileşimi sonraki alt pencereyi etkinleştirir.

Alt Pencere Boyutu ve Düzenlemesi

MDI uygulaması, MDI istemci penceresine ileti göndererek alt pencerelerinin boyutunu ve konumunu denetler. Etkin alt pencereyi en üst düzeye çıkarmak için uygulama, WM_MDIMAXIMIZE iletisini istemci penceresine gönderir. Bir alt pencere maksimize edildiğinde, istemci alanı MDI istemci penceresini tamamen doldurur. Buna ek olarak, sistem alt pencerenin başlık çubuğunu otomatik olarak gizler ve alt pencerenin pencere menü simgesini ve Geri Yükle düğmesini MDI uygulamasının menü çubuğuna ekler. Uygulama, istemci penceresine bir WM_MDIRESTORE iletisi göndererek istemci penceresini özgün (en iyi duruma getirilmiş) boyutuna ve konumuna geri yükleyebilir.

MDI uygulaması alt pencerelerini art arda veya kutucuk biçiminde düzenleyebilir. Alt pencereler basamaklı hale getirildiğinde, pencereler yığında görünür. Yığının en altındaki pencere ekranın sol üst köşesini kaplar ve kalan pencereler dikey ve yatay olarak kaydırılır, böylece her alt pencerenin sol kenarı ve başlık çubuğu görünür olur. Alt pencereleri basamaklı biçimde düzenlemek için MDI uygulaması WM_MDICASCADE iletisini gönderir. Genellikle, kullanıcı pencere menüsünde Art arda tıkladığında uygulama bu iletiyi gönderir.

Alt pencereler döşendiğinde, sistem her alt pencereyi tamamen görüntüler ve hiçbiri diğerleriyle örtüşmez. Tüm pencereler, gerektiğinde istemci penceresine sığacak şekilde boyutlandırılır. Alt pencereleri kutucuk biçiminde düzenlemek için, MDI uygulaması istemci penceresine bir WM_MDITILE iletisi gönderir. Genellikle, kullanıcı pencere menüsünde kutucuk tıkladığında uygulama bu iletiyi gönderir.

MDI uygulaması, desteklediği her alt pencere türü için farklı bir simge sağlamalıdır. Uygulama, alt pencere sınıfını kaydederken bir simge belirtir. Sistem, alt pencere simge durumuna küçültüldüğünde istemci penceresinin alt kısmında otomatik olarak bir alt pencerenin simgesini görüntüler. MDI uygulaması, istemci penceresine bir WM_MDIICONARRANGE iletisi göndererek sistemi alt pencere simgelerini düzenlemeye yönlendirir. Genellikle, kullanıcı pencere menüsünde Simgeleri Düzenle tıkladığında uygulama bu iletiyi gönderir.

Pencere Simge Başlıkları

MDI alt pencereleri simge durumuna küçültülmüş olabileceğinden, MDI uygulamasının simge durumundaki pencere başlıklarını normal MDI alt pencereleriymiş gibi düzenlemekten kaçınması gerekir. Uygulama MDI istemci penceresinin alt pencerelerini numaralandırdığında simge başlığı pencereleri görüntülenir. Simge başlığı pencereleri, diğer alt pencerelerden farklıdır, çünkü MDI alt penceresi tarafından yönetilirler.

Alt pencerenin bir simge başlık penceresi olup olmadığını belirlemek için, GW_OWNER indeksiyle GetWindow işlevini kullanın. Başlık olmayan pencereler NULLdöndürür. Menüler ve iletişim kutuları sahip olunan pencereler olduğundan bu testin üst düzey pencereler için yetersiz olduğunu unutmayın.

Alt Pencere Verileri

Alt pencere sayısı kullanıcının açtığı belge sayısına bağlı olarak değiştiğinden, bir MDI uygulamasının verileri (örneğin, geçerli dosyanın adı) her alt pencereyle ilişkilendirebilmesi gerekir. Bunu yapmanın iki yolu vardır:

  • Çocuk pencere verilerini pencere yapısında saklayın.
  • Pencere özelliklerini kullanın.

Pencere Yapısı

Bir MDI uygulaması bir pencere sınıfını kaydettirdiğinde, pencere yapısında bu belirli pencere sınıfına özgü uygulama verileri için ek alan ayırabilir. Uygulama, bu ek alanda veri depolamak ve almak için GetWindowLongve SetWindowLongişlevlerinikullanır.

Bir uygulama, bir alt pencere için büyük miktarda veri tutmak için bir veri yapısı için bellek ayırabilir ve ardından tutamacı alt pencereyle ilişkili ek alanda yapıyı içeren belleğe depolayabilir.

Pencere Özellikleri

MDI uygulaması, pencere özelliklerini kullanarak belge başına verileri de depolayabilir. Belge başına veri, belirli bir alt pencerede bulunan belge türüne özgü verilerdir. Özellikler, pencere sınıfını kaydederken fazladan alan ayırmanız gerekmediğinden pencere yapısındaki fazladan alandan farklıdır. Bir pencerenin herhangi bir sayıda özelliği olabilir. Ayrıca, pencere yapılarındaki ek alana erişmek için kaydırmalar kullanıldığında, özelliklere dize adları ile başvurulur. Pencere özellikleri hakkında daha fazla bilgi için bkz. Pencere Özellikleri.