Udostępnij za pośrednictwem


TN029: okna podziału

Uwaga ta opisuje MFC Klasa CSplitterWnd, który zapewnia okno dzieli i zarządza rozmiaru innych okienku okna.

Style Splitter

A CSplitterWnd obsługuje dwa różne style dzielenie systemu windows.

"Rozdzielaczy statycznych," okno splitter tworzy okienka podczas jego tworzenia.Zamówienia i numer okienek nigdy się nie zmieniają.Aby zmienić rozmiar różnych okienek służą paski podziału.Styl ten służy do wyświetlania klasy inny widok w każdym z okienek.Edytor grafiki Visual C++ i Menedżera plików systemu Windows są przykładami programów, które używały tego stylu rozdzielacza.Ten styl podziału okna nie używa pola podziału.

W "dynamicznych rozdzielaczy," dodatkowe okienka tworzenia i zniszczone jako użytkownika podziały i podziałów bilansujących ONZ nowe widoki.Ten splitter rozpoczyna się od pojedynczego widoku i zawiera pola podziału dla użytkownika o wszczęciu dzielenie.Okno podziału dynamicznie tworzy nowy obiekt widoku, gdy widok jest rozdzielona w jednym kierunku.Ten nowy obiekt widoku reprezentuje nowe okienko.Jeśli widok jest podzielona w dwóch kierunkach przy użyciu interfejsu klawiatury, okno splitter tworzy trzy nowe obiekty widoku dla trzech nowych okienek.Podczas podziału jest aktywny, system Windows wyświetli pole podziału jako pasek podziału między okienkami.Windows zniszczy dodatkowy widok obiektów po użytkownik usuwa podział, ale oryginalne pozostałości widok aż do samego okna rozdzielacz jest niszczony.Program Microsoft Excel i Microsoft Word są przykładami aplikacji, które używają stylu dynamiczne rozdzielacza.

Podczas tworzenia dowolnego typu podziału okna, należy określić maksymalną liczbę wierszy i kolumn, które będą zarządzane rozdzielacza.Rozdzielacza statycznego utworzy okienek do wypełnienia wszystkich wierszy i kolumn.Dynamiczne splitter spowoduje utworzenie pierwszego okienka po CSplitterWnd jest tworzony.

Maksymalna liczba okienek, które można określić dla statycznych rozdzielaczy wynosi 16 wierszy i 16 kolumn.Zalecane konfiguracje są:

  • kolumny wiersza 1 x 2: zwykle z różnymi okienkami

  • Kolumna 2 wiersze x 1: zwykle z różnymi okienkami

  • wiersze 2 x 2 kolumny: zwykle z podobnych okienkami

Maksymalna liczba okienek, które można określić dla dynamicznych rozdzielaczy wynosi 2 wierszy według 2 kolumny.Zalecane konfiguracje są:

  • kolumny wiersza 1 x 2: kolumnową danych

  • Kolumna 2 wiersze x 1: dla danych tekstowych lub innych

  • wiersze 2 x 2 kolumny: siatki lub tabeli zorientowane na dane

Przykłady Splitter

Użyć wielu MFC przykładowe programy splitter windows, bezpośrednio lub pośrednio.Próbki ogólnej MFC VIEWEX ilustruje kilka zastosowań rozdzielaczy statycznych, tym, jak umieścić rozdzielacza w rozdzielacza.

Aby utworzyć nową wielu dokument interfejsu (MDI) dziecko ramki okna klasy zawierającej okno splitter umożliwia także ClassWizard.Aby uzyskać więcej informacji na temat podziału windows zobacz wiele typów dokumentów, widoków i ramka okna.

Terminologia używana przez implementację

Oto lista terminów, które są specyficzne dla splitter windows:

  • CSplitterWnd:
    Okno zawiera formanty podziału okienka i paski przewijania, które są współużytkowane przez wszystkie okienka w wierszu lub kolumnie.Określ wiersze i kolumny z numerami od zera (pierwszego okienka jest wiersz = 0 i kolumna = 0).

  • Okienko:
    Okno aplikacji które CSplitterWnd zarządza.Okienko jest zwykle obiekt, który jest pochodną Klasa CView, ale może to być dowolna CWnd obiekt, który ma identyfikator dziecko odpowiednie okna.

    Aby użyć CWnd-pochodnych obiektów, przekazać RUNTIME_CLASS obiektu do CreateView działać tak jak w przypadku używania CView-klasy.Należy użyć klasy DECLARE_DYNCREATE i IMPLEMENT_DYNCREATE ponieważ zastosowano dynamiczne tworzenie ramach w czasie wykonywania.Chociaż istnieje wiele kodu w CSplitterWnd dotyczy aby CView klasy, CObject::IsKindOf jest zawsze używany przed wykonaniem tych czynności.

  • Pasek podziału:
    Formant, który jest umieszczony między wierszami i kolumnami okienek.Można wykorzystać do dopasować rozmiary wierszy lub kolumn z okienek.

  • Pole podziału:
    Formant dynamicznego CSplitterWnd można utworzyć nowe wiersze lub kolumny z okienek.Jest on umieszczony u góry paski przewijania pionowego lub na lewo od poziome paski przewijania.

  • Przecięcie podziału:
    Przecięcie pasek podziału pionowy i poziomy pasek podziału.Można przeciągnąć go do jednocześnie dopasować rozmiar wiersza i kolumny okienka.

Udostępnione paski przewijania

CSplitterWnd Klasa obsługuje także paski przewijania udostępnionych.Te formanty paska przewijania są dzieci z CSplitterWnd i są współużytkowane z różnymi okienkami w rozdzielacza.

Na przykład w oknie Wiersz 1 x 2 kolumny, można określić WS_VSCROLL podczas tworzenia CSplitterWnd.System Windows tworzy specjalny pasek przewijania współużytkowane między dwoma okienkami.

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

Gdy użytkownik przesuwa pasek przewijania WM_VSCROLL wiadomości będą wysyłane do obydwu widokach.Gdy widoku albo Ustawia położenie paska przewijania, pasek przewijania udostępniony zostanie ustawiony.

Pamiętaj, że paski przewijania udostępnionego jest najbardziej użyteczna w podobnych obiektach widoku.Po zmiksowaniu widoki różnego rodzaju rozdzielacza może mieć pisać specjalny kod, aby koordynować swoje stanowiska przewijania.Wszelkie CView-pochodnych klasy, która używa CWnd pasek przewijania API będzie delegować do paska przewijania udostępnionego, jeśli istnieje.CScrollView Implementacja jest jednym z przykładów CView klasy, która obsługuje udostępnione pasków przewijania.Klasy, które nie pochodzą z CView, klas, które opierają się na paski przewijania-control lub klas, które użyć standardowej implementacji systemu Windows (na przykład CEditView) nie będzie działać z funkcją pasek przewijania udostępnionego CSplitterWnd.

Minimalne rozmiary

Dla każdego wiersza jest minimalną wysokość wiersza, a dla każdej kolumny istnieje szerokość minimalną kolumny.Minimum to gwarantuje, że okienko nie jest zbyt mały, aby się szczegółowo pełną.

Dla okna rozdzielacza statycznego początkową wiersza minimalna wysokość i szerokość kolumny wynosi 0.Dla dynamicznego podziału okna, początkową wiersza minimalna wysokość i szerokość są ustawiane przez sizeMin parametr CSplitterWnd::Create funkcji.

Te minimalne rozmiary można zmienić za pomocą CSplitterWnd::SetRowInfo i CSplitterWnd::SetColumnInfo funkcji.

Rzeczywiste vs. Idealne rozmiary

Układ okienek w oknie rozdzielacza zależy od rozmiaru ramki, która je zawiera.Gdy użytkownik zmienia rozmiar ramki zawierające CSplitterWnd powoduje przeniesienie i zmienia rozmiar okienka, tak aby mieściły się jak to możliwe.

Użytkownik może ręcznie ustawić wiersz rozmiary szerokość kolumny i wysokość lub program można ustawić rozmiar idealny za pomocą CSplitterWnd klasy.Rzeczywisty rozmiar może być mniejsza lub większa niż idealne.Windows dopasuje rzeczywisty rozmiar, jeśli nie jest wystarczająco dużo miejsca, aby wyświetlić idealny rozmiar lub jeśli istnieje zbyt wiele puste miejsce na prawej lub dolnej części okna rozdzielacza.

Formanty niestandardowe

Można zastąpić wiele funkcji, aby zapewnić dostosowanego zachowania i dostosowany interfejs.Można zastąpić to pierwszy zestaw do zapewnienia alternatywnej zdjęć do różnych elementów graficznych okno podziału.

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

  • virtual void OnInvertTracker(const CRect& rect);

Wywołanie tej funkcji do tworzenia udostępnionych pasek przewijania.Można zastąpić go do tworzenia dodatkowych formantów, obok paska przewijania.

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

Te funkcje implementować logiki dynamicznego podziału okna.Można zastąpić te zapewniają bardziej zaawansowane logiki rozdzielacza.

  • 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);

Funkcja CView

CView Klasy używa następujących poleceń wysokiego szczebla delegować do CSplitterWnd wykonania.Ponieważ te polecenia są wirtualne, standard CView wprowadzenie nie pociągnie za sobą cały CSplitterWnd wdrożenia mają być łączone w.Aplikacje używające funkcji CView , ale nie CSplitterWnd, CSplitterWnd wykonania nie będzie połączony z aplikacją.

  • virtual BOOL CanActivateNext(BOOL bPrev = FALSE);
    Sprawdza, czy ID_NEXT_PANE lub ID_PREV_PANE, jest obecnie możliwe.

  • virtual void ActivateNext(BOOL bPrev = FALSE);
    Wykonuje polecenie "Następnego okienka" lub "Poprzednie okienko".

  • virtual BOOL DoKeyboardSplit();
    Wykonuje klawiatury podzielone polecenia, zwykle "podział okna".

Zobacz też

Inne zasoby

Uwagi techniczne według numerów

Uwagi techniczne według kategorii