Aracılığıyla paylaş


TN029: Bölünmüş Pencereler

Bu not, pencere bölmeleri sağlayan ve diğer bölme pencerelerini yeniden boyutlandırmayı yöneten MFC CSplitterWnd Sınıfını açıklar.

Bölücü Stilleri

A CSplitterWnd , pencereleri bölmek için iki farklı stili destekler.

"Statik bölücüler" bölümünde, bölücü penceresi oluşturulduğunda bölmeleri oluşturur. Bölmelerin sırası ve sayısı hiçbir zaman değişmez. Bölücü çubukları, farklı bölmeleri yeniden boyutlandırmak için kullanılır. Her bölmede farklı bir görünüm sınıfı görüntülemek için bu stili kullanabilirsiniz. Visual C++ grafik düzenleyicisi ve Windows Dosya Yöneticisi, bu ayırıcı stilini kullanan programlara örnek olarak verilebilir. Bölücü penceresinin bu stili ayırıcı kutuları kullanmaz.

"Dinamik bölücüler" bölümünde, kullanıcı yeni görünümleri böldükçe ve böldükçe ek bölmeler oluşturulur ve yok edilir. Bu bölücü tek bir görünümle başlar ve kullanıcının bölmeyi başlatması için bölücü kutuları sağlar. Bölme penceresi, görünüm tek yönde bölündüğünde dinamik olarak yeni bir görünüm nesnesi oluşturur. Bu yeni görünüm nesnesi yeni bölmeyi temsil eder. Görünüm, klavye arabirimi kullanılarak iki yönde bölünürse, bölücü penceresi üç yeni bölme için üç yeni görünüm nesnesi oluşturur. Bölme etkinken, Windows bölme kutusunu bölmeler arasında bir bölücü çubuğu olarak görüntüler. Kullanıcı bölmeyi kaldırdığında Windows ek görünüm nesnelerini yok eder, ancak bölme penceresinin kendisi yok edilene kadar özgün görünüm kalır. Microsoft Excel ve Microsoft Word, dinamik bölücü stilini kullanan uygulamalara örnek olarak verilebilir.

Bölme penceresinden birini oluşturduğunuzda, bölücü tarafından yönetilecek en fazla satır ve sütun sayısını belirtmeniz gerekir. Statik bölücü, tüm satırları ve sütunları doldurmak için bölmeler oluşturur. Dinamik bölücü, oluşturulduğunda yalnızca ilk bölmeyi CSplitterWnd oluşturur.

Statik bölücüler için belirtebileceğiniz bölme sayısı üst sınırı 16 satır ve 16 sütundur. Önerilen yapılandırmalar şunlardır:

  • 1 satır x 2 sütun: genellikle benzer olmayan bölmelerle

  • 2 satır x 1 sütun: genellikle farklı bölmelerle

  • 2 satır x 2 sütun: genellikle benzer bölmelerle

Dinamik bölücüler için belirtebileceğiniz bölme sayısı üst sınırı 2 satır ve 2 sütundur. Önerilen yapılandırmalar şunlardır:

  • 1 satır x 2 sütun : sütunlu veriler için

  • 2 satır x 1 sütun: metinsel veya diğer veriler için

  • 2 satır x 2 sütun: kılavuz veya tablo odaklı veriler için

Bölücü Örnekleri

MFC örnek programlarının çoğu doğrudan veya dolaylı olarak ayırıcı pencereler kullanır. MFC Genel örneği VIEWEX , bir bölücüye ayırıcı yerleştirme de dahil olmak üzere statik ayırıcıların çeşitli kullanımlarını gösterir.

Bölücü penceresi içeren yeni bir birden çok belge arabirimi (MDI) Alt çerçeve penceresi sınıfı oluşturmak için ClassWizard'ı da kullanabilirsiniz. Bölücü pencereler hakkında daha fazla bilgi için bkz . Birden Çok Belge Türü, Görünüm ve Çerçeve Pencereleri.

Uygulama Tarafından Kullanılan Terminoloji

Bölücü pencerelere özgü terimlerin listesi aşağıdadır:

CSplitterWnd: Satır veya sütundaki tüm bölmeler arasında paylaşılan bölme bölme denetimleri ve kaydırma çubukları sağlayan pencere. Sıfır tabanlı sayılarla satırları ve sütunları belirtirsiniz (ilk bölme satır = 0 ve sütun = 0'dır).

Bölme: Uygulamasının yönettiği uygulamaya özgü bir CSplitterWnd pencere. Bölme genellikle CView Sınıfından türetilen bir nesnedir, ancak uygun alt pencere kimliğine sahip herhangi bir CWnd nesnesi olabilir.

Türetilmiş bir CWndnesne kullanmak için, nesnenin RUNTIME_CLASS işlevine CreateView - türetilmiş bir CViewsınıf kullanıyorsanız yaptığınız gibi geçirin. Çerçeve çalışma zamanında dinamik oluşturma kullandığından sınıfınızın DECLARE_DYNCREATE ve IMPLEMENT_DYNCREATE kullanması gerekir. sınıfına özgü CView çok sayıda kod olsa daCSplitterWnd, CObject::IsKindOf her zaman bu eylemler gerçekleştirilmeden önce kullanılır.

Bölücü Çubuğu: Bölmelerin satırları ve sütunları arasına yerleştirilmiş bir denetim. Bölme satırlarının veya sütunlarının boyutlarını ayarlamak için kullanılabilir.

Bölücü Kutusu: Yeni bölme satırları veya sütunları oluşturmak için kullanabileceğiniz bir dinamik CSplitterWnd denetim. Dikey kaydırma çubuklarının en üstünde veya yatay kaydırma çubuklarının solunda bulunur.

Bölücü Kesişimi: Dikey ayırıcı çubuğun ve yatay bölücü çubuğunun kesişimi. Bir satırın ve bölme sütununun boyutunu aynı anda ayarlamak için bunu sürükleyebilirsiniz.

Paylaşılan Kaydırma Çubukları

sınıfı paylaşılan CSplitterWnd kaydırma çubuklarını da destekler. Bu kaydırma çubuğu denetimleri öğesinin CSplitterWnd alt öğeleridir ve bölücüdeki farklı bölmelerle paylaşılır.

Örneğin, 1 satır x 2 sütun penceresinde, oluştururken CSplitterWndWS_VSCROLL belirtebilirsiniz. Windows, iki bölme arasında paylaşılan özel bir kaydırma çubuğu denetimi oluşturur.

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

Kullanıcı kaydırma çubuğunu taşırken, WM_VSCROLL iletiler her iki görünüme de gönderilir. İki görünümden biri kaydırma çubuğu konumunu ayarlarsa, paylaşılan kaydırma çubuğu ayarlanır.

Paylaşılan kaydırma çubuklarının en çok benzer görünüm nesneleriyle yararlı olduğunu unutmayın. Bir ayırıcıda farklı türlerin görünümlerini karıştırırsanız, kaydırma konumlarını koordine etmek için özel kod yazmanız gerekebilir. Kaydırma çubuğu API'lerini CWnd kullanan türetilmiş herhangi bir CViewsınıf varsa paylaşılan kaydırma çubuğuna temsilci olarak atanır. Uygulama CScrollView , paylaşılan kaydırma çubuklarını destekleyen bir CView sınıf örneğidir. 'den CViewtüretilmemiş sınıflar, denetim dışı kaydırma çubuklarına dayanan sınıflar veya standart Windows uygulamaları kullanan sınıflar (örneğin, CEditView) öğesinin CSplitterWndpaylaşılan kaydırma çubuğu özelliğiyle çalışmaz.

En Küçük Boyutlar

Her satır için en düşük satır yüksekliği ve her sütun için en düşük sütun genişliği vardır. Bu minimum, bir bölmenin tam ayrıntılı olarak gösterilemeyecek kadar küçük olmamasını garanti eder.

Statik bölücü penceresi için ilk en düşük satır yüksekliği ve sütun genişliği 0'dır. Dinamik bölücü penceresi için, ilk minimum satır yüksekliği ve sütun genişliği işlevin sizeMin parametresine CSplitterWnd::Create göre ayarlanır.

CSplitterWnd::SetRowInfo ve CSplitterWnd::SetColumnInfo işlevlerini kullanarak bu minimum boyutları değiştirebilirsiniz.

Gerçek ve İdeal Boyutlar karşılaştırması

Bölme penceresindeki bölmelerin düzeni, bunları içeren çerçevenin boyutuna bağlıdır. Kullanıcı, içeren çerçeveyi yeniden boyutlandırdığında, CSplitterWnd bölmeleri mümkün olduğunca sığacak şekilde yeniden konumlandırır ve yeniden boyutlandırır.

Kullanıcı satır yüksekliğini ve sütun genişliği boyutlarını el ile ayarlayabilir veya program sınıfını CSplitterWnd kullanarak ideal boyutu ayarlayabilir. Gerçek boyut idealden daha küçük veya daha büyük olabilir. İdeal boyutu görüntülemek için yeterli alan yoksa veya bölücü penceresinin sağ veya alt kısmında çok fazla boş alan varsa Windows gerçek boyutu ayarlar.

Özel Denetimler

Özelleştirilmiş davranış ve özelleştirilmiş arabirim sağlamak için birçok işlevi geçersiz kılabilirsiniz. Bölücü penceresinin çeşitli grafik bileşenleri için alternatif görüntüler sağlamak üzere bu ilk kümeyi geçersiz kılabilirsiniz.

  • virtual void OnDrawSpltter(CDC* pDC, ESplitType nType, const CRect& rect);

  • virtual void OnInvertTracker(const CRect& rect);

Paylaşılan kaydırma çubuğu denetimi oluşturmak için bu işlevi çağırırsınız. Kaydırma çubuğunun yanında ek denetimler oluşturmak için bunu geçersiz kılabilirsiniz.

  • virtual BOOL CreateScrollBarCtrl(DWORD dwStyle, UINT nID);

Bu işlevler dinamik bölücü penceresinin mantığını uygular. Daha gelişmiş bölücü mantığı sağlamak için bunları geçersiz kılabilirsiniz.

  • virtual void DeleteView(int row, int col);

  • virtual BOOL SplitRow(int cyBefore);

  • virtual BOOL SplitColumn(int cxBefore);

  • virtual void DeleteRow(int rowDelete);

  • virtual void DeleteColumn(int colDelete);

CView İşlevselliği

sınıfı, CView uygulamaya temsilci atamak için CSplitterWnd aşağıdaki üst düzey komutları kullanır. Bu komutlar sanal olduğundan, standart CView uygulama tüm CSplitterWnd uygulamanın bağlı olmasını gerektirmez. kullanan ancak kullanmayan CViewCSplitterWndCSplitterWnd uygulamalar için uygulama uygulamayla ilişkilendirilmeyecektir.

  • virtual BOOL CanActivateNext(BOOL bPrev = FALSE);

    ID_NEXT_PANE veya ID_PREV_PANE şu anda mümkün olup olmadığını denetler.

  • virtual void ActivateNext(BOOL bPrev = FALSE);

    "Sonraki Bölme" veya "Önceki Bölme" komutunu yürütür.

  • virtual BOOL DoKeyboardSplit();

    Genellikle "Pencere Bölme" olan klavye bölme komutunu yürütür.

Ayrıca bkz.

Sayıya Göre Teknik Notlar
Kategoriye Göre Teknik Notlar