Udostępnij za pośrednictwem


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. Są to modele:

  • 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 dzielone dzielą przestrzeń widoku jednego okna dokumentu 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.

  • 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 w edytorze tekstu 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 przedstawiający trzy interfejsy użytkownika z wieloma widokami.
interfejsy użytkownika Multiple-View

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 UpdateAllViews, zobacz klasę CView w dokumentacji MFC i przykład 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 Multiple-View interfejsów użytkownika.

Okna dzielnika

W oknie dzielonym można podzielić je na dwie lub więcej przewijalne sekcje. 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żdy panel jest widokiem na ten sam dokument. W "dynamicznych" rozdzielaczach widoki są tej samej klasy, jak pokazano w części b interfejsów użytkownika na rysunku Multiple-View. W rozdzielaczach statycznych widoki mogą należeć do różnych klas. 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. Okna dzielące dodane do przykładu Scribble są przykładem. W tym temacie opisano technikę tworzenia dynamicznych okien rozdzielających. Dynamiczne okno podziału jest wyświetlane w części b rysunku Multiple-View interfejsów użytkownika.

Statyczne okna podziału, z widokami różnych typów, zaczynają się od okna podzielonego na wiele paneli, z których każdy pełni inną funkcję. Na przykład w edytorze map bitowych Visual C++ w oknie obrazu są wyświetlane dwa okienka obok siebie. W lewym panelu wyświetlany jest obraz mapy bitowej w rzeczywistej wielkości. W okienku po prawej stronie jest wyświetlany 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 podziału jest wyświetlane w części c na rysunku Multiple-View Interfejsy Użytkownika.

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

Zobacz także

Architektura dokumentu/widoku