Diese Applikationsschrift beschreibt die MFC CSplitterWnd -Klasse, die Fenster Teilungen bereitstellen und verwalten die Größenänderung von anderen Fensterbereich Windows verwendet wird.
Hinweis&Nbsp; Bitte achten Sie darauf, lesen technische Anmerkung 20 zur Verwendung von IDs und gültigen ID-Bereiche.
Splitter-Stile
Ein CSplitterWnd unterstützt zwei verschiedene Arten von Windows aufteilen.
In "statische Splitter," werden die Bereiche erstellt, wenn das Splitterfenster erstellt, und die Reihenfolge und die Anzahl der Fensterbereiche nie ändern. Teilerleisten werden verwendet, um die verschiedenen Bereiche zu ändern, und die verschiedenen Fensterbereiche üblicherweise unterschiedlichen Ansichtsklassen. Die Visual C++-Grafik-Editor und die Windows-Datei-Manager sind Beispiele für Programme, die diese Splitter-Stil verwenden. Splitter-Boxen sind von dieser Art der Splitter nicht verwendet.
In "Dynamische Splitter," zusätzliche Bereiche erstellt und zerstört, als der Benutzer Teilungen und un-Splits neuen Ansichten. Diese Splitter beginnt mit einer einzigen Ansicht und Splitter-Boxen werden bereitgestellt, um die Spaltung einzuleiten. Wenn die Ansicht in eine Richtung geteilt ist, wird eine zusätzliche Ansicht-Objekt dynamisch erstellt, um den neuen Bereich darzustellen. Wenn die Ansicht in zwei Richtungen (mit der Tastaturschnittstelle möglich) geteilt ist, werden drei neue Ansichten erstellt, um die drei neue Bereiche darstellen. Wenn die Teilung aktiv ist, wird das Splitter-Feld als eine Trennleiste zwischen den Fenstern gezeichnet. Zusätzliche Ansicht, die Objekte werden zerstört, wenn der Benutzer einen Split entfernt, aber die ursprüngliche Ansicht (Zeile 0, Spalte 0) bleibt, bis das Splitterfenster selbst zerstört wird. Microsoft Excel oder Microsoft Word sind Beispiele für die dynamische Splitter-Stil.
Wenn entweder Art von unterteilten Fenster erstellen, geben Sie die maximale Anzahl von Zeilen und Spalten, die der Splitter verwalten wird. Für eine statische Splitter müssen Bereiche erstellt werden, um alle Zeilen und Spalten zu füllen. Für eine dynamische Splitter ist der erste Bereich automatisch erstellt, wenn die CSplitterWnd erstellt wird.
Die maximale Anzahl der Bereiche, die Sie, für statische Splitter angeben können ist 16 Zeilen und 16 Spalten. Die empfohlenen Konfigurationen werden:
Die maximale Anzahl der Bereiche, die Sie, für dynamische Splitter angeben können ist 2 Zeilen von 2 Spalten. Die empfohlenen Konfigurationen werden:
Splitter-Beispiele
Viele von den MFC-Beispielprogrammen verwenden Splitterfenster direkt oder indirekt. Schritt 4 von der MFC-Tutorial KRITZELN fügt ein dynamisches Splitterfenster der CScribView in mehrere Bereiche aufgeteilt. Wie in diesem Schritt hinzufügen, ein neuen Splitter Frame Fenster ist sehr einfach mit der Funktion Klasse hinzufügen des Klassen-Assistenten. In diesem Beispiel wird ein dynamisches Splitterfenster standardmäßig.
Im allgemeinen MFC-Beispiel VIEWEX-Beispiel veranschaulicht mehrere Verwendungsmöglichkeiten der statischen Splitter, wie z. B. einen Splitter in einen Splitter zu platzieren.
Klassen-Assistent wird auch eine neue mehrere Dokument Interface (MDI) untergeordneten Frame Window-Klasse erstellen, die ein Teilfenster enthält. Finden Sie in den Teilfenstern im Visual C++ Programmer's Guide.
Implementierung verwendeten Terminologie
Terminologie der Teile eine CSplitterWnd und zugehörige Objekte.
CSplitterWnd:
Dies ist ein Fenster, das im Bereich spaltende Controls bietet und Bildlaufleisten, die zwischen allen Bereichen auf eine Zeile oder Spalte geteilt werden. Zeilen und Spalten werden mit nullbasierten Zahlen angegeben [im erste Bereich ist Zeile 0 und Spalte = = 0]
Bereich:
Ei&ne anwendungsspezifische-Fenster, das von einem CSplitterWndverwaltet wird. Ein Bereich ist in der Regel eine CView-abgeleitetes Objekt, aber in der Tat kann jedes CWnd -Objekt, das das entsprechende untergeordnete Fenster ID.nbsp hat;
Zu tun, übergeben Sie einfach die RU&NTIME_CLASS der Ihre CWnd abgeleitete Klasse wie Sie wäre, wenn Sie ein CView abgeleitete class.nbsp benutze wart; Ihre Klasse muss DECLARE_DYNCREATE und IMPLEMENT_DYNCREATE verwenden--das Framework verwendet dynamische Erstellung zur Laufzeit. Zwar es eine Menge von Code, der CView CSplitterWndspezifisch ist gibt, wird immer CObject::IsKindOf verwendet, bevor diese Aktionen ausgeführt werden. Sicherlich ist es viel einfacher CSplitterWnd mit CView abgeleitete Klassen als CWnd Klassen abgeleitete.
Split Bar:
Ein Steuerelement, das zwischen Zeilen und Spalten der Bereiche platziert wird. Es kann verwendet werden, um die Größe von Zeilen oder Spalten der Bereiche anpassen.
Splitter-Box:
Eine kleine Kontrolle an der Spitze der vertikalen Bildlaufleisten oder Links von der horizontalen Bildlaufleisten in einem dynamischen CSplitterWnd. Verwendet, um neue Zeilen oder Spalten der Bereiche erstellen.
Splitter-Kreuzung:
Das am Schnittpunkt einer vertikalen Trennleiste und einer horizontalen Trennleiste. Kann gezogen werden, um die Größe einer Zeile und Spalte der Bereiche gleichzeitig anzupassen.
Freigegebene Bildlaufleisten
Die CSplitterWnd -Klasse unterstützt auch freigegebene Bildlaufleisten. Diese Bildlaufleisten-Steuerelemente sind untergeordnete Elemente der CSplitterWnd und sind gemeinsam mit den verschiedenen Bereichen der splitter.
In einem Fenster Spalte 1 Zeile X 2 können Sie z. B. WS_VSCROLL angeben, wenn die CSplitterWnderstellen. Eine spezielle Bildlaufleisten-Steuerelement wird erstellt, die zwischen den beiden Fenstern gemeinsam genutzt wird.
[&Nbsp; ][ ][^]
[pane00][pane01][|]
[ ][ ][v]
Wenn der Benutzer die Bildlaufleiste verschoben wird, werden beide Ansichten WM_VSCROLL Nachrichten gesendet. Wenn die Ansichten die Position die Bildlaufleiste festlegen, wird die freigegebene Bildlaufleiste festgelegt werden.
Beachten Sie, dass die freigegebenen Bildlaufleisten mit dynamischen oder statischen Splits, teilen ähnliche Objekte am nützlichsten sind. Wenn Sie Ansichten verschiedener Typen in einen Splitter mischen, dann müssen Sie speziellen Code zum koordinieren ihre Scroll-Positionen zu schreiben. Alle CView-abgeleitete Klasse, die die Bildlaufleiste CWnd APIs auf den freigegebenen Bildlaufleiste delegieren verwendet, werden wenn es vorhanden ist. Die CScrollView -Implementierung ist ein Beispiel einer CView -Klasse unterstützt Bildlaufleisten geteilt. Non -CView abgeleitete Klassen, Klassen, die auf Noncontrol-Bildlaufleisten verlassen oder Klassen, die standard-Windows verwenden Implementierungen (z. B. CEditView) nicht mit dem Feature freigegebene Scroll Bar CSplitterWnd funktioniert.
Mindestgrößen
Für jede Zeile gibt es eine minimale Zeilenhöhe, und ebenso für jede Spalte gibt es eine minimale Spaltenbreite. Dieses Minimum wird verwendet, zu entscheiden, ob der Bereich ist zu klein, um vollständige detailliert dargestellt werden.
Für ein statisches Teilfenster ist die erste minimale Zeilenhöhe und Spaltenbreite 0. Für ein dynamisches Splitterfenster sind die ersten minimale Zeilenhöhe und Spaltenbreite festlegen, indem der SizeMin -Parameter an die Funktion Splitterfenstern.
Diese Mindestgrößen können mit der SetRowInfo und SetColumnInfo APIs geändert werden.
Tatsächliche vs. ideale Größen
Das Layout der Bereiche im Splitterfenster hängt von der Größe des enthaltenden Frames (die wiederum die CSplitterWndändert. CSplitterWnd verschiebt und die Größe der Scheiben so, dass sie so optimal wie möglich passen).
Die Zeile Zeilenhöhe und breite Größen festgelegt durch den Benutzer oder durch das CSplitterWnd -API repräsentieren die ideale Größe. Die tatsächliche Größe kann sein, dass ideale Größe (wenn es nicht genügend Platz gibt für diesen Bereich die ideale Größe machen) kleiner oder größer als die ideale Größe (sofern dieser Bereich den Left-Over-Raum auf der rechten oder unteren Bereich des Splitterfensters füllt größer gemacht werden muss).
Geschützte Schnittstelle
Die folgenden beschreibt einige der die Splitter Fenster Umsetzung Overridables, die von erfahrenen Benutzern von CSplitterWnd verwendet werden kann, um die Funktionen und die Benutzeroberfläche für diese Klasse anzupassen. Diese APIs sind nicht offiziell dokumentiert und unterliegen Änderungen in zukünftigen Versionen von MFC. Finden Sie den Implementierungscode für die Quelle für weitere Informationen über diese Anwendung APIs.
Zeichnung der Teilerleisten, Boxen und Tracker:
enum ESplitType Nbsp; {SplitBox, Teilungslinie, SplitIntersection, SplitBorder};
virtual void OnDrawSplitter (CDC * pDC, ESplitType nType, const CRect & Rect);
virtual void OnInvertTracker (const CRect & Rect)
Diese virtuelle Funktion kann überschrieben werden, um alternative Bilder für die verschiedenen grafischen Komponenten eines Fensters Splitter bereitzustellen. Die Standard-Bilder sind ähnlich wie die Splitter in Microsoft Works für Windows: nur Kreuzungen der Teilerleisten werden zusammen gemischt. Die Bildsprache ist auch ganz anders, wenn das Framework Windows 4.0--erkennt um die Visuals in Shell für das (künftige) Betriebssystem entsprechen.
Erstellen von Steuerelementen und Ansichten:
virtual BOOL CreateScrollBarCtrl(DWORD dwStyle, UINT nID)
Dies wird aufgerufen, um eine freigegebene Bildlaufleisten-Steuerelement erstellen. Es kann überschrieben werden, um zusätzliche Steuerelemente neben einer Bildlaufleiste aufzunehmen. Das Standardverhalten ist nur normale Windows-Bildlaufleisten-Steuerelemente erstellen.
virtual void DeleteView (Int Row, Int Col);
Virtual BOOL SplitRow(int cyBefore);
Virtual BOOL SplitColumn(int cxBefore);
virtuelle void DeleteRow (Int Zeile);
virtual void DeleteColumn (Int Row)
Diese Funktionen sind aufgerufen, die Logik des Splitterfensters dynamische implementieren (d. h., wenn das Splitterfenster im SPLS_DYNAMIC_SPLIT -Stil hat). Sie können, zusammen mit der virtuellen Funktion CreateView, erweiterte dynamische Splitter Implementierung angepasst werden.
Im folgenden werden high-Level-Befehle, die von der CView -Klasse delegieren an das CSplitterWnd -Implementierung verwendet werden. Sie sind virtuell, so dass die Standardimplementierung von CView erfordert nicht die gesamte CSplitterWnd -Implementierung in verknüpft werden. Für Anwendungen, die CView aber nicht CSplitterWndverwenden, wird die CSplitterWnd -Implementierung nicht mit der Anwendung verknüpft werden.
virtual BOOL CanActivateNext(BOOL bPrev = FALSE);
Überprüft, ob der Befehl "Nächster Fensterbereich" oder "Vorherigen Bereich" derzeit möglich ist.
virtual void ActivateNext (BOOL bPrev = FALSE);
Führt den Befehl "Nächster Fensterbereich" oder "Vorherigen Bereich".
virtual BOOL DoKeyboardSplit();
Führt die Tastatur aufteilen Befehl, in der Regel "Fenster teilen".
Technische Hinweise von &Nummer |nbsp; Technische Hinweise nach Kategorie