Freigeben über


TN029: Splitterfenster

Dieser Hinweis wird von MFC CSplitterWnd-Klasse, das Fenster teilungen bereitstellt und die Größenanpassung von anderen Fenster Gültigkeitsbereich verwaltet.

Splitter-Formate

CSplitterWnd unterstützt zwei verschiedene Formate des Teilens von Fenstern.

"In den statischen Splittern" stellt das Splitterfenster die Bereiche erstellt, wenn es erstellt wird.Die Reihenfolge und Anzahl der Bereiche ändern nie ab.bereitstellen können Splitter werden verwendet, um die verschiedenen Bereiche ihre Größe zu ändern.Sie können dieses Format, um eine andere Ansichtsklasse in jedem Bereich angezeigt.Der Visual C++-Grafikeditor und der Windows-Datei-Manager sind Beispiele für Programme, die das Format der Splitter verwenden.Dieses Format des Splitterfensters Felder Splitter nicht verwendet.

"In den dynamischen Splittern" werden zusätzliche Bereiche z. B. die Benutzer und teilungen UN Teilungen neuen Ansichten erstellt und zerstört.In diesem Splitter fängt mit einer einzigen Sicht an und stellt Splitter Feldern bereit, sodass der Benutzer das Teilen initiiert.Das Splitterfenster dynamisch erstellt ein neues Ansichtsobjekt, wenn die Ansicht in eine Richtung geteilt wird.Dieses neue Ansichtsobjekt stellt den neuen Bereich dar.Wenn die Ansicht in beiden Richtungen geteilt wird mithilfe der Tastatur Oberfläche verwendet wird, erstellt das Splitterfenster drei neue Ansicht Objekte für die drei neuen Bereiche.Während die Teilung aktiv ist, wird das Feld Splitter Windows als Trennleiste zwischen den Bereichen an.Windows zerstört zusätzliche Objekte anzeigen, wenn der Benutzer eine Teilung entfernt, aber die ursprüngliche Ansicht verbleibt, bis das Splitterfenster selbst zerstört wird.Microsoft Excel und Microsoft Word sind Beispiele für dynamische Anwendungen, die das Format der Splitter verwenden.

Wenn Sie ein Splitterfenster erstellt, das vom nett ist, müssen Sie die maximale Anzahl von Zeilen und Spalten angeben, die der Splitter verwaltet.Ein statischer Splitter stellt Bereiche erstellt, um sämtliche Zeilen und Spalten angepasst.Ein dynamischer Splitter stellt nur den ersten Bereich, wenn CSplitterWnd erstellt wird.

Die maximale Anzahl von Bereichen, die Sie für statische Splitter angeben können, beträgt 16 Zeilen und 16 Spalten.Die empfohlene Konfigurationen sind:

  • Zeile 1 x 2 Spalten: unähnlichen in der Regel mit Bereichen

  • Spalte 1 x 2 Zeilen: unähnlichen in der Regel mit Bereichen

  • 2 Zeilen x 2 Spalten: normalerweise mit ähnlichen Bereichen

Die maximale Anzahl von Bereichen, die Sie für dynamische Splitter angeben können, beträgt 2 Zeilen und 2 Spalten.Die empfohlene Konfigurationen sind:

  • Zeile 1 x 2 Spalten: Säulen für Daten

  • Spalte 1 x 2 Zeilen: für die Text oder andere Daten

  • 2 Zeilen x 2 Spalten: orientierte Daten des Rasters für die Tabelle bzw.

Splitter-Beispiele

Viele der MFC-Beispielprogramm direkt oder indirekt splitterfenster verwenden.Das MFC, das VIEWEX typisches Beispiel veranschaulicht einige Verwendungsmöglichkeiten den statischen Splittern und enthält, wie Sie einen Splitter in einem Splitter platziert.

Sie können auch ClassWizard verwenden, um eine neue Rahmenfensterklasse untergeordnete MDI (Multiple Document Interface) zu erstellen, die ein Splitterfenster enthält.Weitere Informationen über Splitterfenster finden Sie unter Mehrere Dokumenttypen, Ansichten und Rahmenfenster.

Implementierung von Terminologie

Im Folgenden finden Sie eine Liste von Begriffen, die den Splitterfenstern spezifisch sind:

  • CSplitterWnd:
    Ein Fenster, das das Bereich-Teilen von Steuerelementen und Bildlaufleisten bereitgestellt werden, die zwischen allen Bereichen einer Zeile oder Spalte freigegeben werden.Geben Sie Zeilen und Spalten mit Basiszahlen an (der erste Bereich ist 0 = Zeile und Spalte = 0).

  • Bereich:
    Ein anwendungsspezifisches Fenster, das CSplitterWnd verwaltet.Ein Bereich ist normalerweise ein Objekt, das über CView-Klasse abgeleitet ist, jedoch kann jedes Objekt sein, das CWnd die entsprechende ID des untergeordneten Fensters hat

    So verwenden CWnd abgeleitete Objekt, führen Sie RUNTIME_CLASS des Objekts zur CreateView-Funktion, z. B. Sie wurden, wenn Sie CView frei abgeleiteten Klasse.Die Klasse muss DECLARE_DYNCREATE und IMPLEMENT_DYNCREATE verwenden, da das Framework das dynamische Erstellen zur Laufzeit verwendet.Obwohl es viel Code in CSplitterWnd gibt, der der CView-Klasse bestimmt ist, wird CObject::IsKindOf immer verwendet, bevor diese Aktionen ausgeführt werden.

  • Splitter-Leiste:
    Ein Steuerelement, das zwischen Bereichen von Zeilen und Spalten positioniert wird.Es kann verwendet werden, um die Größe von Zeilen oder Spalten von Bereichen anzupassen.

  • Splitter-Feld:
    Ein Steuerelement in dynamischen CSplitterWnd, die Sie verwenden können, um neue Zeilen oder Spalten von Bereichen zu erstellen.Es befindet sich am oberen Rand der vertikalen Bildlaufleisten oder auf der linken Seite der horizontalen Bildlaufleisten.

  • Splitter-Schnittmenge:
    Die Schnittmenge einer vertikalen Trennleiste und der horizontalen Trennleiste.Sie können sie ziehen, um die Größe einer Zeile und Spalte der Bereiche gleichzeitig anzupassen.

Freigegebene Bildlaufleisten

Die CSplitterWnd-Klasse unterstützt auch freigegebene Bildlaufleisten.Diese ScrollBar-Steuerelementen sind untergeordnete Elemente CSplitterWnd und mit unterschiedlichen Bereichen im Splitter freigegeben.

Beispielsweise kann in einer Zeile 1 x das Fenster mit 2 Spalten, können Sie WS_VSCROLL angeben, wenn Sie CSplitterWnd erstellen.Windows stellt ein besonderes Bildlaufleisten-Steuerelement erstellt, das zwischen den beiden Bereichen gemeinsam verwendet wird.

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

Wenn der Benutzer die Bildlaufleiste verschoben werden WM_VSCROLL Nachrichten in beiden Ansichten gesendet.Wenn eine Sicht die Position der Bildlaufleisten festgelegt wird, wird die freigegebene Bildlaufleiste festgelegt.

Beachten Sie, dass freigegebene Bildlaufleisten mit ähnlichen Ansichtsobjekte am nützlichsten sind.Wenn Sie Sichten unterschiedlicher Typen in einen Splitter kombinieren, müssen Sie möglicherweise speziellen Code schreiben, um ihre Positionen Bildlauf zu koordinieren.Jeder CView abgeleitete Klasse, die die CWnd Bildlaufleiste API verwendet, delegiert zur freigegebenen Bildlaufleiste, sofern vorhanden.Die CScrollView Implementierung ist ein Beispiel für eine CView Bildlaufleisten, die freigegebene Klasse unterstützt.Klassen, die nicht von CView abgeleitete Klassen, die kein Steuerelement auf die Bildlaufleisten basieren, oder Klassen, die Standard-Windows-Implementierungen verwenden (z. B. CEditView) können nicht mit der freigegebenen CSplitterWnd Feature für Bildlaufleisten aus.

Minimale Größe

Für jede Zeile gibt es eine minimale Zeilenhöhe, und für jede Spalte gibt es eine minimale Spaltenbreite.Das Minimum wird sichergestellt, dass kein Gültigkeitsbereich zu klein ist, im vollständigen Detail angezeigt werden soll.

Für ein statisches Splitterfenster ist die ursprüngliche minimale Zeilenhöhe oder der Spaltenbreite 0.Für ein dynamisches Splitterfenster werden die ursprüngliche minimale Spaltenbreite und die Zeilenhöhe über den sizeMin-Parameter der CSplitterWnd::Create-Funktion festgelegt.

Sie können diese minimalen Größe ändern, indem Sie die CSplitterWnd::SetRowInfo und CSplitterWnd::SetColumnInfo-Funktionen verwenden.

Tatsächlich mit einer Gegensignatur.Ideale Größen

Das Layout der Bereiche im Splitterfenster hängt von der Größe des Rahmens ab, die sie enthält.Wenn ein Benutzer die enthaltenen Rahmens ändert, CSplitterWnd automatisch neu positioniert und an die Bereiche angepasst werden, dass sie passen sowie möglich.

Der Benutzer kann die Haupt- und Spaltenbreite Zeilenhöhen- manuell festlegen oder das Programm kann die optimale Größe festlegen, indem sie die CSplitterWnd-Klasse verwendet.Das tatsächliche Größe kann als Im Idealfall kleiner oder größer sein.Windows passt die tatsächliche Größe, wenn nicht genügend Platz vorhanden sind, die optimale Größe anzuzeigen, oder wenn es zu viele Leerraum rechts oder unteren Rand des Splitterfensters vorhanden ist.

Benutzerdefinierte Steuerelemente

Sie können viele Funktionen überschreiben, um eine benutzerdefinierte Schnittstelle und benutzerdefiniertes Verhalten bereitzustellen.Sie können dies überschreiben anfangs festgelegt, um alternative Bilder für die verschiedenen visuellen Komponenten eines Splitterfensters bereitzustellen.

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

  • virtual void OnInvertTracker(const CRect& rect);

Rufen Sie diese Funktion auf, um ein freigegebenes Bildlaufleisten-Steuerelement zu erstellen.Sie können dies überschreiben, um zusätzliche Steuerelemente neben der Bildlaufleiste zu erstellen.

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

Diese Funktionen implementieren die Logik des dynamischen Splitterfensters.Sie können diese erweiterte Splitter überschreiben, um die Logik bereitzustellen.

  • 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-Funktionalität

Die CView-Klasse verwendet die folgenden Befehle auf hoher Ebene, zu CSplitterWnd die Implementierung zu delegieren.Da diese Befehle virtuell ist, benötigt die Standard- CView Implementierung nicht die gesamte CSplitterWnd Implementierung eingebunden werden.Für Anwendungen, die CView jedoch nicht CSplitterWnd verwenden, wird die CSplitterWnd Implementierung nicht mit der Anwendung verknüpft.

  • virtual BOOL CanActivateNext(BOOL bPrev = FALSE);
    Überprüft, ob ID_NEXT_PANE oder ID_PREV_PANE nur möglich ist.

  • virtual void ActivateNext(BOOL bPrev = FALSE);
    Führt den Befehl "des nächsten Bereichs" oder "des vorherigen Bereichs" aus.

  • virtual BOOL DoKeyboardSplit();
    Führt den geteilten Befehl die Tastatur aus, das normalerweise "Windows" teilen.

Siehe auch

Weitere Ressourcen

Technische Hinweise durch Zahl

Technische Hinweise nach Kategorie