TN029: Splitter Windows

Bu Not pencere bölmelerini sağlamak ve diğer bölmesi pencereleri yeniden boyutlandırma yönetmek için kullanılır mfc CSplitterWnd sınıfının açıklar.

&Notnbsp;  Lütfen kullanımı geçerli kimlik aralıkları ve kimlikleri ile ilgili Teknik Not 20 okuyun.

Ayırıcı stili

Windows bölme, iki farklı tarz bir CSplitterWnd destekler.

"Statik ayırıcılar içinde" bölmeleri bölme pencerenin oluşturulur ve bölmeleri sayısını ve sırasını değiştirmek asla oluşturulur. Ayırıcı çubukları farklı bölmeleri yeniden boyutlandırmak için kullanılır ve farklı bölmeleri genellikle farklı sınıfları vardır. Visual c++ grafik editörü ve Windows Dosya Yöneticisi'ni bu ayırıcı stili kullanan programlar verilebilir. Ayırıcı kutularına bölücü bu stil tarafından kullanılmaz.

"Dinamik ayırıcılar," ek bölmeler oluşturulur ve kullanıcı böler ve BM-bölmelerini yeni görünümler yok. Bu bölücü tek bir görünümü ile başlar ve ayırıcı kutularına bölme başlatmak için sağlanır. Tek yönde bölünmüş görünüm, ek görünüm nesne yeni bölmesini göstermek için dinamik olarak oluşturulur. İki yönde (klavye arabirimi ile olası) bölünmüş görünüm, üç yeni görünümler üç yeni bölme temsil etmek üzere oluşturulur. Bölme etkin olduğunda, bölme kutusunu bölmeler arasında bir ayırıcı çubuğu olarak çizilir. Ek görünüm, kullanıcı bir bölünme kaldırdığında nesneler yok edilir, ancak özgün görünümü (satır 0, sütun 0) kalır kadar kırık pencere yok. Microsoft Excel veya Microsoft Word'e örneklerdir dinamik ayırıcı stili.

İki tür-in kırık pencere oluştururken, satır ve sütun ayırıcı yönetecek sayısını belirtmeniz gerekir. Statik bir ayırıcı için tüm satır ve sütunları doldurmak için bölmeleri oluşturulmalıdır. CSplitterWnd oluşturulduğunda dinamik bir ayırıcı için otomatik olarak ilk bölme oluşturulur.

Maksimum statik ayırıcılar için belirleyebileceğiniz bölmeleri 16 satıra 16 sütun sayısıdır. Önerilen yapılandırmaları:

En fazla dinamik ayırıcılar için belirleyebileceğiniz bölmeleri 2 sütun 2 satır sayısıdır. Önerilen yapılandırmaları:

Bölücü örnekleri

Mfc örnek programların çoğunu doğrudan ya da dolaylı olarak bölücü windows kullanın. mfc öğreticinin Adım 4 KARALAMAK CScribView birden fazla bölmelere ayırmak için dinamik kırık pencere ekler. Bu adımda gösterildiği gibi yeni bir ayırıcı çerçeve penceresi ClassWizard Add Class özelliğiyle çok kolay ekleme. Bu örnek, varsayılan olarak bir dinamik bölücü penceredir.

Mfc Genel örnek VIEWEX statik ayırıcılar, nasıl bir ayırıcı bir bölme dahil olmak üzere çeşitli kullanımları gösterilmektedir.

ClassWizard de yeni bir kırık pencere içeren birden çok belge arabirim (MDI) alt kare pencere sınıfı oluşturur. Splitter pencereleri Visual c++ programlama Kılavuzu na başvurun.

Uygulama tarafından kullanılan terminoloji

Terminoloji bir CSplitterWnd ve ilgili nesnelerin parçaları.

CSplitterWnd:

Bu bölme bölme kontrolleri sağlayan bir pencere ve satır veya sütun üzerinde tüm bölmeler arasında paylaşılan kaydırma çubuklarını olduğunu. Satır ve sütun sıfır tabanlı sayılarla belirtilir [yani ilk satır bölmesidir = 0 ve sütun = 0]

Bölmesi:

Bir CSplitterW&ndtarafından yönetilen bir uygulamaya özel pencere. Bir bölmedir genellikle bir CView-nesne elde, ama aslında herhangi bir CWnd nesne uygun alt pencere ID.nbsp sahip olabilir;

CView türetilen class.nbsp kullanıyor olsaydınız bunu yapmak için sadece RU&NTIME_CLASS , CWnd , geçmek türetilmiş sınıf; Sınıf declare_dyncreate ve IMPLEMENT_DYNCREATE kullanmanız gerekir--çalışma zamanında dinamik oluşturma çerçevesi kullanır. CView CSplitterWndiçinde belirli kod çok olsa da, bu eylemleri gerçekleştirmesinden önce CObject::IsKindOf her zaman kullanılır.  Kesinlikle, CWnd türetilmiş sınıflar daha CSplitterWnd CView türetilmiş sınıfları ile kullanımı daha kolay.

Bölme çubuğu:

Satırlar ve sütunlar bölmelerinde arasında konumlandırılmış bir denetimdir. Boyutları satır veya sütunlar bölmelerinde ayarlamak için kullanılabilir.

Bölme kutusu:

Dikey kaydırma çubuklarının veya dinamik CSplitterWndyatay kaydırma çubukları sol üstündeki küçük bir denetim. Yeni satırlar veya sütunlar bölmelerinde oluşturmak için kullanılan.

Bölücü Kavşağı:

Dikey ayırıcı çubuğu ve yatay ayırıcı çubuğu kesişimi. Aynı anda bir satır ve sütun bölmelerin boyutunu ayarlamak için sürüncemede.

Paylaşılan kaydırma çubukları

CSplitterWnd sınıfı, paylaşılan kaydırma çubukları da destekler. Bu kaydırma çubuğu denetimleri CSplitterWnd çocukları ve farklı bölmeler ile belgili tanımlık kırık paylaşılan.

Örneğin, 1 satır x 2 sütun pencerede ws_vscroll CSplitterWndoluştururken belirttiğiniz. İki bölme paylaşılan özel kaydırma çubuğu denetimi oluşturulur.

[      ][      ][^]
[pane00][pane01][|]
[      ][      ][v]

Kullanıcı kaydırma çubuğunu geçtiğinde, wm_vscroll iletileri için iki kez gönderilecektir. Gösterim kaydırma çubuğu konumunu ayarladığınızda, paylaşılan kaydırma çubuğunu ayarlama.

Paylaşılan kaydırma çubuklarını dinamik veya statik bölünmesi ile benzer bir görünüm nesneleri bölme en yararlı olduğunu unutmayın. Farklı türde bir bölme görünümleri karıştırırsanız, kaydırma konumlarını koordine etmek için özel kod yazmak gerekebilir. Herhangi bir CView-türetilmiş sınıf API temsilci paylaşılan kaydırma çubuğuna varsa CWnd kaydırma çubuğunu kullanır. CScrollView destekleyen kaydırma çubuklarını paylaşılan bir örnek CView sınıf uygulamasıdır. Sigara -CView türetilmiş sınıfları, noncontrol kaydırma çubuklarını itimat sınıfları veya standart Windows uygulamaları (örneğin, CEditView)-ecek değil iş CSplitterWnd paylaşılan kaydırma çubuğu özelliği ile sınıfları.

Asgari boyutları

Her satır için bir minimum satır yüksekliği olduğunu ve benzer her sütun için orada en az bir sütun genişliği. Bu asgari bölmesi tam ayrıntılı olarak gösterilecek küçük olduğuna karar vermek için kullanılır.

Statik Bölümlendirici pencere için başlangıç en az satır yüksekliği ve sütun genişliğini 0'dır. Dinamik kırık pencere için başlangıç en az satır yüksekliği ve sütun genişliğini sizeMin parametresi CSplitterWnd::Create işlevi tarafından ayarlanır.

Bu asgari boyutları SetRowInfo ve SetColumnInfo API ile değiştirilebilir.

Ideal boyutları vs. gerçek

Kırık pencere içindeki bölmeler düzenini (hangi sırayla CSplitterWndyeniden boyutlandırır. içeren çerçeve boyutuna bağlıdır CSplitterWnd konumlandırır ve böylece onlar olabildiğince ideal bir konuma uygun bölmeleri yeniden boyutlandırır).

Kullanıcı tarafından ya da CSplitterWnd API aracılığıyla satır yüksekliği ve sütun genişliğini boyutları ideal boyut temsil eder. (Bu bölmesini sağ veya alt bölme pencerenin sol üzerinde boşluğu doldurmak için büyük yapılmalıdır) gerçek boyutu (yoksa bu bölme ideal boyut yapmak için yeterli oda) ideal bu boyutundan küçük veya ideal boyutundan daha büyük olabilir.

Korumalı arabirim

CSplitterWnd gelişmiş kullanıcılar tarafından özellikleri ve kullanıcı arabirimi bu sınıfın özelleştirmek için kullanılabilir kırık pencere uygulaması overridables bazıları aşağıda açıklanmıştır. Bu API'ler resmen belgesiz ve mfc gelecekteki sürümlerinde değişebilir. Uygulama kaynak kodu bu uygulama API hakkında daha ayrıntılı bilgi için bakınız.

Ayırıcı çubuk, kutular ve izci çizim:

 enum ESplitType nbsp;  {splitBox, splitBar, splitIntersection, splitBorder};
Virtual void OnDrawSplitter (cdc * pDC, ESplitType nType, const CRect & rect);
Virtual void OnInvertTracker (const CRect & rect)

Bu sanal işlevi, bir bölme pencerenin çeşitli grafik bileşenleri için alternatif görüntü sağlamak için kılınabilir. Varsayılan görüntü bölücü Microsoft Works for Windows benzer: bölücü çubuğu yalnızca Kavşakları birlikte harmanlandığı. Görüntüleri de çerçeve (gelecek) bu işletim sisteminde kabuk görsel eşleşmesi için Windows 4.0--algıladığında oldukça farklı.

Denetimler ve görünümler oluşturma:

virtual bool CreateScrollBarCtrl(DWORD dwStyle, UINT nID)

Bu paylaşılan kaydırma çubuğu denetimi oluşturma denir. Kaydırma çubuğunun yanındaki ek denetimleri eklemek kılınabilir. Sadece normal Windows kaydırma çubuğu denetimleri oluşturmak için varsayılan davranıştır.

virtual void DeleteView (int satır, int col);
Virtual bool SplitRow(int cyBefore);
Virtual bool SplitColumn(int cxBefore);
Virtual void DeleteRow (satır, int);
Virtual void DeleteColumn (int satır)

Bu işlevler dinamik kırık pencere mantığını uygulamak (diğer bir deyişle, kırık pencere SPLS_DYNAMIC_SPLIT stilde) denir. Onlar, birlikte sanal işlevi daha gelişmiş dinamik ayırıcılar uygulamaya CreateView, özelleştirilebilir.

CSplitterWnd uygulanması için temsilci seçmek için CView sınıfı tarafından kullanılan üst düzey komutları şunlardır: Standart CView uygulaması içinde bağlantılı olarak tüm CSplitterWnd uygulama gerektirmez ki bunlar, sanal. CView ama CSplitterWndkullanan uygulamalar için CSplitterWnd uygulama uygulama ile bağlantılı olmayacaktır.

virtual bool CanActivateNext(BOOL bPrev = FALSE);

"Sonraki bölme" ya da "Önceki bölme" komutu şu anda mümkün olup olmadığını denetler.

virtual void ActivateNext (bool bPrev = false);

"Sonraki bölme" ya da "Önceki bölme" komutu gerçekleştirir.

virtual bool DoKeyboardSplit();

Komut, genellikle "Pencereyi Böl" bölünmüş klavye gerçekleştirir.

Teknik notlar numarasına göre |nbsp; Teknik notlar kategorisine göre

Index