Udostępnij przez


Wiele typów dokumentów, widoków i okien ramowych

Relacja standardowa między dokumentem, jego widokiem i oknem ramowym jest opisana w artykule Tworzenie dokumentu/widoku. Wiele aplikacji obsługuje jeden typ dokumentu (ale prawdopodobnie wiele otwartych dokumentów tego typu) z jednym widokiem w dokumencie i tylko jednym oknem ramowym na dokument. Jednak niektóre aplikacje mogą wymagać zmiany co najmniej jednej z tych wartości domyślnych.

Co chcesz dowiedzieć się więcej o

Wiele typów dokumentów

Kreator aplikacji MFC tworzy dla Ciebie pojedynczą klasę dokumentów. Jednak w niektórych przypadkach może być konieczne obsługę więcej niż jednego typu dokumentu. Na przykład aplikacja może potrzebować dokumentów arkusza i wykresu. Każdy typ dokumentu jest reprezentowany przez własną klasę dokumentów i prawdopodobnie także przez własną klasę widoku. Gdy użytkownik wybierze polecenie Plik Nowy, platforma wyświetli okno dialogowe z listą obsługiwanych typów dokumentów. Następnie tworzy dokument typu wybranego przez użytkownika. Każdy typ dokumentu jest zarządzany przez własny obiekt document-template.

Aby utworzyć dodatkowe klasy dokumentów, zobacz Dodawanie klasy. Wybierz pozycję CDocument jako typ klasy, z którego mają pochodzić, i podaj żądane informacje o dokumencie. Następnie zaimplementuj dane nowej klasy.

Aby poinformować platformę o dodatkowej klasie dokumentów, należy dodać drugie wywołanie metody AddDocTemplate w zastąpieniu InitInstance klasy aplikacji. Aby uzyskać więcej informacji, zobacz Szablony dokumentów.

Wiele widoków

Wiele dokumentów wymaga tylko jednego widoku, ale można obsługiwać więcej niż jeden widok pojedynczego dokumentu. Aby ułatwić implementowanie wielu widoków, obiekt dokumentu przechowuje listę jego widoków, udostępnia funkcje członkowskie do dodawania i usuwania widoków oraz dostarcza funkcję składową UpdateAllViews w celu umożliwienia wielu widoków informacji o zmianie danych dokumentu.

MFC obsługuje trzy typowe interfejsy użytkownika wymagające wielu widoków w tym samym dokumencie. Te modele to:

  • Wyświetl obiekty tej samej klasy, z których każdy jest w osobnym oknie ramki dokumentu MDI.

    Możesz chcieć obsługiwać tworzenie drugiego okna ramki w dokumencie. Użytkownik może wybrać polecenie Nowe okno, aby otworzyć drugą ramkę z widokiem tego samego dokumentu, a następnie użyć dwóch ramek, aby wyświetlić różne części dokumentu jednocześnie. Platforma obsługuje polecenie Nowe okno w menu Okno dla aplikacji MDI przez duplikowanie początkowego okna ramki i widoku dołączonego do dokumentu.

  • Wyświetl obiekty tej samej klasy w tym samym oknie ramki dokumentu.

    Okna dzielące widok jednego okna dokumentu są podzielone na wiele oddzielnych widoków dokumentu. Struktura tworzy wiele obiektów widoku z tej samej klasy widoku. Aby uzyskać więcej informacji, zobacz Splitter Windows (Podział systemu Windows).

  • Wyświetlanie obiektów różnych klas w jednym oknie ramowym.

    W tym modelu odmiana okna podziału zawiera wiele widoków, które współużytkuje jedno okno ramki. Widoki są konstruowane z różnych klas. Każdy widok zapewnia inny sposób wyświetlania tego samego dokumentu. Na przykład jeden widok może wyświetlać dokument przetwarzania wyrazów w trybie normalnym, podczas gdy drugi widok pokazuje go w trybie konspektu. Kontrolka rozdzielająca umożliwia użytkownikowi dostosowanie względnych rozmiarów widoków.

Na poniższej ilustracji podzielonej na części a, b i c, przedstawiono trzy modele interfejsu użytkownika w przedstawionej powyżej kolejności.

Diagram showing three multiple view user interfaces.
Interfejsy użytkownika z wieloma widokami

Platforma udostępnia te modele, implementując polecenie New Window i udostępniając klasę CSplitterWnd zgodnie z opisem w systemie Windows splitter. Możesz zaimplementować inne modele przy użyciu tych modeli jako punktu początkowego. Przykładowe programy ilustrujące różne konfiguracje widoków, okien ramowych i rozdzielaczy, zobacz Przykłady MFC.

Aby uzyskać więcej informacji na temat UpdateAllViewsklasy , zobacz klasa CView w dokumentacjiMFC i przykładu Scribble.

Okna z wieloma ramami

Możesz użyć polecenia Nowy okno w menu Okno dla aplikacji MDI, aby utworzyć drugie okno ramki w tym samym dokumencie. Aby uzyskać więcej informacji, zobacz pierwszy model na rysunku Interfejsy użytkownika z wieloma widokami.

okna podziału

W oknie podziału okno jest lub może być podzielone na dwa lub więcej okienek przewijania. Kontrolka rozdzielająca (lub "pole podziału") w ramce okna obok pasków przewijania umożliwia użytkownikowi dostosowanie względnych rozmiarów okienek. Każde okienko jest widokiem w tym samym dokumencie. W "dynamicznych" rozdzielaczy widoki są tej samej klasy, jak pokazano w części b rysunku Interfejsy użytkownika wielokrotnego wyświetlania. W rozdzielaczach statycznych widoki mogą być różne klasy. Okna podziału obu rodzajów są obsługiwane przez klasę CSplitterWnd.

Dynamiczne okna podziału z widokami tej samej klasy umożliwiają użytkownikowi podzielenie okna na wiele okienek, a następnie przewinięcie różnych okienek w celu wyświetlenia różnych części dokumentu. Użytkownik może również usunąć okno, aby usunąć dodatkowe widoki. Przykładowe okna podziału dodane do przykładu Scribble. W tym temacie opisano technikę tworzenia dynamicznych okien rozdzielających. Dynamiczne okno podziału jest wyświetlane w części b rysunku Wiele widoków interfejsów użytkownika.

Statyczne okna rozdzielacze, z widokami różnych klas, zaczynają się od okna podzielonego na wiele okienek, z których każdy ma inny cel. Na przykład w edytorze map bitowych Visual C++ w oknie obrazu są wyświetlane dwa okienka obok siebie. W okienku po lewej stronie zostanie wyświetlony obraz o rozmiarze życia mapy bitowej. W okienku po prawej stronie jest wyświetlany powiększony lub powiększony obraz tej samej mapy bitowej. Okienka są oddzielone "paskiem rozdzielanym", który użytkownik może przeciągnąć, aby zmienić względne rozmiary okienek. Statyczne okno rozdzielacze jest wyświetlane w części c na rysunku Interfejsy użytkownika z wieloma widokami.

Aby uzyskać więcej informacji, zobacz klasa CSplitterWnd w dokumentacjiMFC i przykłady MFC.

Zobacz też

Architektura dokumentu/widoku