TN029: Rozdzielacz Windows

Uwaga ta zawiera opis klasy MFC CSplitterWnd , która służy do zapewnienia podziały okien i zarządzanie, zmiana rozmiaru innych okien okienko.

Uwaga   Proszę należy koniecznie przeczytać technicznych 20 Uwaga odnośnie stosowania identyfikatorów i prawidłowe zakresy identyfikatorów.

Rozdzielacz style

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

W "statyczne kable sieciowe," okienka są tworzone, gdy tworzony jest okno rozdzielacza i nigdy nie zmienia kolejność i liczba okienek. Paska podziału są używane do zmiany rozmiaru okienka różnych i różnymi okienkami są zazwyczaj inny widok klas. Edytor grafiki Visual C++ i Menedżera plików systemu Windows są przykładowe programy, które używają ten styl podziału. Rozdzielacz pola nie są używane przez ten styl podziału.

W "Dynamiczne kable sieciowe," dodatkowych okienek są tworzone i zniszczone jako użytkownik podziały i ONZ podziały nowe widoki. Tego podziału rozpoczyna się w jednym widoku, a pola podziału są dostarczane do inicjowania podzielenie. Jeśli widok jest podzielona w jednym kierunku, dynamicznie tworzony jest obiekt dodatkowy widok do reprezentowania nowe okienko. Jeśli widok jest podzielona w dwóch kierunkach (możliwe z interfejsem klawiatury), trzy nowe widoki są tworzone do reprezentowania trzech nowych okienek. Podczas podziału jest aktywny, pole podziału jest rysowany pasek podziału między okienkami. Dodatkowy widok, które obiekty są niszczone, gdy użytkownik usuwa podział, ale oryginalnego widoku (wiersz 0, kolumna 0) pozostaje, dopóki okno rozdzielacza, sam jest niszczony. Program Microsoft Excel lub Microsoft Word są przykładami stylu dynamicznym podziału.

Podczas tworzenia albo rodzaj podziału okna, należy określić maksymalną liczbę wierszy i kolumn, które rozdzielacza będzie zarządzać. Do rozdzielacza statycznego okienka musi zostać utworzony do wypełnienia wszystkich wierszy i kolumn. Dla dynamicznych rozdzielacza pierwszego okienka automatycznie jest tworzony podczas tworzenia CSplitterWnd.

Maksymalna liczba okienek, którą można określić dla statycznych kable sieciowe jest 16 wierszy przez 16 kolumn. Zalecane konfiguracje są:

Maksymalna liczba okienek, którą można określić dla dynamicznych kable sieciowe jest 2 wierszy przez 2 kolumny. Zalecane konfiguracje są:

Przykłady podziału

Wiele programów przykładowych MFC użyć rozdzielacza systemu windows, bezpośrednio lub pośrednio. Krok 4 samouczek MFC BAZGROŁY dodaje okno dynamiczne podziału dzieli CScribView na wiele okienka. Jak pokazano ten krok, dodając nowe okno ramki podziału jest bardzo proste dzięki funkcji Dodaj klasy ClassWizard. W tym przykładzie jest to okno dynamiczne rozdzielacza, domyślnie.

Próbki ogólnej MFC VIEWEX przedstawiono kilka zastosowań statyczne kable sieciowe, w tym sposób umieścić rozdzielacza rozdzielacza.

ClassWizard będzie również utworzyć nową wielu dokumentu interfejsu (MDI) dziecko ramki okna klasę który zawiera okno rozdzielacza. Prosimy przeczytaµ podziału okna w Visual C++ Programmer's Guide.

Terminologia używana przez implementację

Terminologia części CSplitterWnd i obiekty powiązane.

CSplitterWnd:

Jest to okno, w którym udostępnia formanty podziału okienka i paski przewijania, które są współużytkowane przez wszystkie okienka na wiersz lub kolumnę. Wiersze i kolumny są określane za pomocą liczb od zera [oznacza to, że pierwszy okienko jest wiersz = 0 i kolumna = 0]

Okienko:

Ok&no specyficzne dla aplikacji, które są zarządzane przez CSplitterWnd. Okienko jest zwykle CView-pochodnych obiektu, ale w rzeczywistości może być dowolnym obiektem CWnd , zawierający okno podrzędne odpowiednie ID.nbsp;

Aby to zrobić, po prostu przekazać RU&NTIME_CLASS z CWnd pochodnych klasy podobnie jeśli uzywasz class.nbsp CView pochodnych; Klasa musi używać DECLARE_DYNCREATE i IMPLEMENT_DYNCREATE --ramach używa dynamiczne tworzenie w czasie wykonywania.  Chociaż istnieje dużą ilość kodu, który jest CView określone w CSplitterWnd, CObject::IsKindOf jest zawsze używany przed działaniami są wykonywane.  Z pewnością jest znacznie łatwiejszy w użyciu CSplitterWnd z klasy CView pochodnych, niż CWnd klasom pochodnym.

Pasek podziału:

Formant, który jest umieszczony między wierszami i kolumnami okienek. Mogą być używane do korygowania rozmiarów wierszy lub kolumn okienka.

Pole podziału:

Małe kontroli u góry pasków przewijania pionowego lub po lewej stronie paski przewijania poziomego w dynamicznych CSplitterWnd. Używany do tworzenia nowych wierszy lub kolumn okienka.

Przecięcie podziału:

Przecięcie pasek podziału pionowego i pasek podziału. Mogą być przeciągane aby dopasować rozmiar wiersza i kolumny okienek jednocześnie.

Udostępnione paski przewijania

Klasa CSplitterWnd obsługuje również paski przewijania udostępnionym. Te formanty pasek przewijania są dzieci CSplitterWnd i są wspólne z różnymi okienkami rozdzielacza.

Na przykład w oknie kolumny wiersza 1 x 2, można określić WS_VSCROLL podczas tworzenia CSplitterWnd. Powstaną formancie pasek przewijania specjalne, że podziału między dwoma okienkami.

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

Gdy użytkownik najedzie na pasku przewijania, WM_VSCROLL wiadomości będą wysyłane do obydwu widokach. Po widoki ustawić położenie paska przewijania, pasek przewijania udostępniony zostanie ustawiona.

Należy zauważyć, że paski przewijania udostępnionego są najbardziej przydatne z dynamiczne lub statyczne podziały, dzielenie widoku podobnych obiektów. Jeżeli jest wymieszany widoki różnych typów w rozdzielacza, mogą mieć do napisania kodu specjalne skoordynowania stanowisk przewijania. Każdy CView-klasy, który korzysta z paska przewijania CWnd API będzie delegować do paska przewijania udostępnionego, jeśli istnieje. Implementacja CScrollView jest jednym z takich przykładów klasy CView że obsługiwane udostępnionych paski przewijania. Non -CView pochodnych klas, klas, które opierają się na paski przewijania niedotyczące sterowania są przesyłane lub klasy, używające Standardowy Windows implementacje (na przykład CEditView) nie będzie działać z funkcją pasek przewijania udostępnionego CSplitterWnd.

Minimalne rozmiary

Dla każdego wiersza jest wysokość wiersza minimalne i podobnie dla każdej kolumny istnieje minimalnej szerokości. To minimum jest używana do podejmowania decyzji, jeśli okienko jest do małych mają być przedstawiane w pełne szczegóły.

W oknie rozdzielacza statycznego wstępny wiersz minimalna wysokość i szerokość kolumny jest 0. Dla okna dynamiczne rozdzielacza wstępny wiersz minimalna wysokość i szerokość kolumny są ustawiane przez parametr sizeMin funkcji CSplitterWnd::Create.

Te minimalne rozmiary można zmieniać za pomocą SetRowInfo i SetColumnInfo API.

Rzeczywiste vs. idealne rozmiary

Układ okienek w oknie podziału zależy od rozmiaru ramki zawierającej, (która z kolei jest dostosowywany CSplitterWnd. CSplitterWnd zmiana i zmienia rozmiar okienka, tak aby zmieściły się jak najlepiej jak to możliwe).

Wiersz wysokości i kolumnie szerokość rozmiary ustawiony przez użytkownika lub za pośrednictwem CSplitterWnd API, reprezentują idealne rozmiar. Rzeczywisty rozmiar może być mniejszy niż to idealny (jeśli nie ma miejsca do okienka idealne rozmiar) lub większa niż wielkość idealny (jeśli okienka musi być dokonane z większych wypełnianie obszaru przedziale do prawej lub dolnej części okna podziału).

Interfejs chronionych

Poniżej opisano niektóre z overridables wykonania okno podziału, które mogą być używane przez zaawansowanych użytkowników CSplitterWnd dostosowywania funkcji i interfejsu użytkownika tej klasy. Te interfejsy API są oficjalnie nieudokumentowane i mogą zostać zmienione w przyszłych wersjach MFC. Przeczytaj do wykonania kodu źródłowego więcej informacji na temat tych wykonania API.

Rysowanie paska podziału, pola i trackers:

 wylicz ESplitType nbsp;  {splitBox, splitBar, splitIntersection, splitBorder};
wirtualny OnDrawSplitter void (CDC * pDC, ESplitType nType, stała CRect & rect);
wirtualny OnInvertTracker void (const CRect & rect)

Tych funkcji wirtualny może być zastąpiona zapewnić alternatywne zdjęć do różnych elementów graficznych okna rozdzielacza. Zdjęć domyślnym jest podobny do podziału w Microsoft Works dla Windows: tylko przecięć paska podziału są mieszane razem. Zdjęć jest całkiem inna również, gdy ramach wykryje Windows 4.0--w celu dopasowania graficznie w łupinach tego (przyszłych) systemu operacyjnego.

Tworzenie formantów i widoków:

wirtualny BOOL CreateScrollBarCtrl(DWORD dwStyle, UINT nID)

Jest to tak zwane aby utworzyć formant pasek przewijania udostępnionym. Każde pozwolenie na wywóz może być zastąpiona uwzględnienie dodatkowych formantów obok paska przewijania. Zachowaniem domyślnym jest po prostu utworzyć zwykłych kontroli pasek przewijania systemu Windows.

wirtualny DeleteView void (int wiersz, kolumnę int);
wirtualny BOOL SplitRow(int cyBefore);
wirtualny BOOL SplitColumn(int cxBefore);
wirtualny DeleteRow void (int wiersz);
wirtualny DeleteColumn void (int wiersza)

Te funkcje są wywoływane do wdrożenia logiki okna dynamiczne rozdzielacza (jeśli okno podziału zostało zapisane w stylu SPLS_DYNAMIC_SPLIT ). One mogą być dostosowywane, wraz z virtual function CreateView, do wprowadzenia bardziej zaawansowanych dynamiczne kable sieciowe.

Poniżej przedstawiono polecenia wysokiego poziomu, które są używane przez klasę CView delegować do wykonania CSplitterWnd . Są one wirtualnych, tak aby standardową implementacją CView nie wymaga całego wykonania CSplitterWnd mają być łączone w. Dla aplikacji, które korzystają z CView , ale nie CSplitterWndnie wykonania CSplitterWnd będzie połączone z aplikacji.

wirtualny BOOL CanActivateNext(BOOL bPrev = FALSE);

Sprawdza, czy polecenie "Następnego okienka" lub "Poprzedniego okienka" jest obecnie możliwe.

wirtualny ActivateNext void (BOOL bPrev = FALSE);

Wykonuje polecenie "Następnego okienka" lub "Poprzedniego okienka".

wirtualny BOOL DoKeyboardSplit();

Wykonuje klawiatury podzielić zwykle "okno Split", polecenie.

Uwagi techniczne przez liczbę |nbsp; Uwagi techniczne według kategorii

Index