TN029: Windows podziału
Uwaga ta opisuje MFC Klasa CSplitterWnd, który zapewnia okno dzieli i zarządza, zmiana rozmiaru innych okien okienka.
Style podziału
A CSplitterWnd obsługuje dwóch różnych stylów dzielenie systemu windows.
W "rozdzielaczy statycznych," okno podziału tworzy okienka podczas jego tworzenia.Zamówienia i liczba okienek nigdy się nie zmieni.Paski podziału są używane do zmiany rozmiaru okienek.Aby wyświetlić klasy inny widok w każdym okienku, można użyć tego stylu.Edytor grafiki Visual C++ i Menedżera plików systemu Windows są przykładami programy używające tego stylu rozdzielacza.Ten styl podziału okna nie korzysta z pola podziału.
W "dynamicznych rozdzielaczy," dodatkowe okienka są tworzone i niszczone jako użytkownika podziały i podziały ONZ nowe widoki.Tego podziału rozpoczyna jednego widoku i zawiera pola podziału dla użytkownika zainicjować dzielenie.Okno podziału dynamicznie tworzy nowy obiekt widoku, gdy widok jest podzielony w jednym kierunku.Ten nowy widok obiekt reprezentuje nowe okienko.Jeśli widok jest podzielona w dwóch kierunkach przy użyciu interfejsu klawiatury, okno podziału tworzy trzy nowe obiekty widoku dla trzech nowych okienek.Gdy podziału jest aktywny, system Windows wyświetla pole podziału jako pasek podziału między okienkami.Windows niszczy widoku dodatkowe obiekty, gdy użytkownik usuwa podział, ale oryginalny pozostaje widoku, aż do samego okna podziału jest niszczony.Program Microsoft Excel i Microsoft Word są przykładami aplikacji używających styl podziału dynamiczne.
Podczas tworzenia albo rodzaju podziału okna, należy określić maksymalną liczbę wierszy i kolumn, które będą zarządzane rozdzielacza.Rozdzielacza statycznego utworzy okienka, aby wypełnić wiersze i kolumny.Dynamiczne podziału zostanie utworzony tylko okienka podczas CSplitterWnd jest tworzony.
Maksymalna liczba okienka, które można określić dla statycznych rozdzielaczy wynosi 16 wierszy i 16 kolumn.Zalecane konfiguracje są:
kolumny wiersza 1 x 2: zazwyczaj z różnymi okienkami
wiersze od 2 x 1 kolumny: zazwyczaj z różnymi okienkami
wiersze 2 x 2 kolumny: zazwyczaj z podobnych okienkami
Maksymalna liczba okienek, które można określić dla dynamicznych rozdzielaczy wynosi 2 wierszy i kolumn 2.Zalecane konfiguracje są:
kolumny wiersza 1 x 2: kolumnowy danych
wiersze od 2 x 1 kolumny: dla danych tekstowych lub
wiersze 2 x 2 kolumny: siatki lub tabeli zorientowanych danych
Przykłady podziału
Wiele przykładowych programów MFC użyć systemu windows rozdzielacza, bezpośrednio lub pośrednio.Próbki ogólnej MFC VIEWEX przedstawia kilka zastosowań statyczne rozdzielaczy, w tym sposób podziału, należy umieścić rozdzielacza.
Aby utworzyć nową wielu dokument interfejsu (MDI) dziecko ramki okna klasy zawierającej okno podziału umożliwia także ClassWizard.Więcej informacji dotyczących podziału systemu windows, zobacz wiele typów dokumentów, widoków i ramki Windows.
Terminologia używana przez implementację
Oto lista warunków, które są specyficzne dla systemu windows podziału:
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 (pierwszy okienko jest wiersz = 0 i kolumna = 0).Okienko:
Okno aplikacji, która CSplitterWnd zarządza.Okienko jest zazwyczaj obiektem, który pochodzi od Klasa CView, ale może być dowolny CWnd obiekt, który ma identyfikator dziecko odpowiednie okna.Aby użyć CWnd-uzyskane obiektów, przekazać RUNTIME_CLASS obiektu do CreateView działa podobnie jak w przypadku używania CView-klasy.Należy użyć klasy DECLARE_DYNCREATE i IMPLEMENT_DYNCREATE ponieważ ramy tworzenia dynamicznych w czasie wykonywania.Chociaż istnieje dużo kodu w CSplitterWnd to specyficzne dla CView klasy CObject::IsKindOf jest zawsze używana przed tych czynności.
Pasek podziału:
Formant, który jest umieszczony między wierszami i kolumnami okienka.Może służyć do dopasować rozmiary wierszy lub kolumn okienka.Pole podziału:
Formant dynamicznego CSplitterWnd można utworzyć nowe wiersze lub kolumny okienka.Jest on umieszczony u góry pasków przewijania w pionie lub w lewo poziome paski przewijania.Przecięcie podziału:
Przecięcie pasek podziału pionowego i poziomy pasek podziału.Można przeciągnąć ją dopasować rozmiar wiersza i kolumny okienek jednocześnie.
Udostępnione pasków przewijania
CSplitterWnd Klasy obsługuje także paski przewijania udostępnionych.Te formanty paska przewijania są dzieci CSplitterWnd i są współużytkowane z innego okienka 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 jest udostępniony 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ępnionych zostanie ustawiona.
Należy zauważyć, że paski przewijania udostępnionego najbardziej przydatne z widoku podobnych obiektów.Jeżeli jest wymieszany widoki różnych typów rozdzielacza, może być pisać kod specjalnego skoordynowania stanowisk przewijania.Każdy CView-klasy, która korzysta z CWnd API będzie delegować do paska przewijania udostępnionego, jeśli istnieje paska przewijania.CScrollView Implementacja jest przykładem CView klasy, która obsługuje udostępnione paski przewijania.Klasy, które nie pochodzą z CView, klas, które polegają na paski przewijania-control lub klasy, które użyć standardowej implementacji systemu Windows (na przykład CEditView) nie będzie działać z funkcji paska przewijania udostępnionego CSplitterWnd.
Minimalne rozmiary
Dla każdego wiersza jest minimalną wysokość wiersza, a dla każdej kolumny jest szerokość minimalną kolumny.Minimum to gwarancje okienko nie jest zbyt mały, aby wykazać szczegółowo kompletne.
Dla okna rozdzielacza statycznego wstępny wiersz minimalna wysokość i szerokość kolumny wynosi 0.Dla okna dynamiczne rozdzielacza, wstępny wiersz minimalna wysokość i szerokość kolumny są ustawiane przez sizeMin parametr CSplitterWnd::Create funkcji.
Minimalne rozmiary można zmienić za pomocą CSplitterWnd::SetRowInfo i CSplitterWnd::SetColumnInfo funkcji.
WAR.Idealne rozmiarów
Układ okienek w oknie podziału zależy od rozmiaru ramki, która je zawiera.Gdy użytkownik zmienia rozmiar ramki zawierające CSplitterWnd zmiana i zmienia rozmiar okienka, tak aby mieściły się jak również.
Użytkownik może ręcznie ustawić wiersz rozmiary szerokość wysokość i kolumny lub program, można ustawić rozmiar idealne za pomocą CSplitterWnd klasy.Rzeczywisty rozmiar może być mniejsza lub większa niż idealne.Windows dopasuje rozmiar rzeczywisty, jeśli jest za mało miejsca, aby wyświetlić idealne 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 dostosowanego zachowania i dostosowany interfejs.Można zastąpić pierwszego zestawu 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łania tej funkcji do tworzenia udostępnionych pasek przewijania.Można zastąpić go, aby utworzyć dodatkowe formanty obok paska przewijania.
- virtual BOOL CreateScrollBarCtrl(DWORD dwStyle, UINT nID);
Te funkcje implementacja schematu logicznego dynamiczne 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 wdrożenia.Ponieważ te polecenia są wirtualne, standard CView nie wymagają wykonania całego 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 obecnie możliwe jest ID_NEXT_PANE lub ID_PREV_PANE.virtual void ActivateNext(BOOL bPrev = FALSE);
Wykonuje polecenie "Następnym okienku" lub "poprzednie".virtual BOOL DoKeyboardSplit();
Wykonuje klawiatury podzielić polecenia, zwykle "podział okna".