Множественные типы документов, представления и окна фреймов

Стандартная связь между документом, его представлением и окном фрейма описана в разделе Создание документов и представлений. Многие приложения поддерживают один тип документов (но возможно несколько открытых документов этого типа) с одним представлением в документе и только с одним окном фрейма в каждом документе. Однако для некоторых приложений может потребоваться изменить один или несколько из этих значений по умолчанию.

Что вы хотите узнать больше о

Несколько типов документов

Мастер приложений MFC создаст для вас один класс документа. Однако в некоторых случаях может потребоваться поддержка нескольких типов документов. Например, в приложении могут понадобиться листы и диаграммы. Каждый тип документа представлен собственным классом документа и, возможно, собственным классом представления. Когда пользователь выбирает в меню "Файл" команду "Создать", платформа отображает диалоговое окно со списком поддерживаемых типов документов. Затем она создает документ типа, выбранного пользователем. Управление каждым типом документа осуществляет его собственный объект шаблона документа.

Сведения о создании дополнительных классов документов см. в разделе Добавление класса. Выберите CDocument в качестве типа класса, от которого будет выполняться наследование, и укажите необходимые сведения о документе. Затем реализуйте данные нового класса.

Чтобы платформа узнала о дополнительном классе документов, добавьте второй вызов AddDocTemplate в переопределение InitInstance класса приложения. Дополнительные сведения см. в статье Шаблоны документов.

Несколько представлений

Для многих документов требуется только одно представление. Однако существует возможность поддержки нескольких представлений одного документа. Чтобы пользователь мог реализовать несколько представлений, объект документа хранит список своих представлений, предоставляет функции-члены для добавления и удаления представлений и предлагает функцию-член UpdateAllViews для предоставления ряду представлений сведений об изменении данных документа.

MFC поддерживает три стандартных пользовательских интерфейса, требующих несколько представлений в одном документе. Вот эти модели.

  • Объекты представления одного класса, каждое в отдельном окне фрейма документа MDI.

    Может потребоваться поддержка создания второго окна фрейма в документе. Нужно выбрать команду создания окна, чтобы открыть второй фрейм с представлением того же документа, а затем использовать два фрейма для одновременного просмотра разных частей документа. Платформа поддерживает команду создания окна в меню "Окно" в приложениях MDI путем дублирования исходного окна фрейма и представления, прикрепленного к документу.

  • Объекты представления одного класса в одном окне фрейма документа.

    Окна разделителей делят пространство для просмотра в одном окне документа на несколько отдельных представлений документа. Платформа создает несколько объектов представления из того же класса представления. Дополнительные сведения см. в разделе Окна разделителей.

  • Объекты представления различных классов в одном окне фрейма.

    В этой модели, являющейся разновидностью окна с разделителями, несколько представлений используют одно окно фрейма. Представления создаются из различных классов, каждое из них имеет свой способ просмотра одного и того же документа. Например, в одном представлении текстовый документ может отображаться в обычном режиме, а в другом — в режиме структуры. Элемент управления разделителя позволяет настраивать относительные размеры представления.

На следующем рисунке, разделенном на части a, b и c, показаны три модели пользовательского интерфейса в указанном выше порядке.

Diagram showing three multiple view user interfaces.
Пользовательские интерфейсы с несколькими представлениями

Платформа предоставляет эти модели путем реализации команды создания окна и предоставления класса CSplitterWnd, как описано в разделе Окна разделителей. Их можно использовать в качестве отправной точки для реализации других моделей. Примеры программ, иллюстрирующие различные конфигурации представлений, окон фреймов и разделителей, см. в разделе Примеры MFC.

Дополнительные сведения о UpdateAllViewsсм. в разделе о классе CView в справочнике по библиотеке MFC и в разделе Пример Scribble.

Несколько окон фреймов

Для создания второго окна фрейма в том же документе можно использовать команду создания окна в меню "Окно" приложений MDI. Дополнительные сведения см. в первой модели на рисунке Пользовательские интерфейсы с несколькими представлениями.

Окна разделителей

В окне разделителя окно можно разделить на две или более прокручиваемые области. Элемент управления разделителя (или поле разделения) в фрейме окна рядом с полосами прокрутки позволяет изменять относительные размеры областей. Каждая область — это представление того же документа. В окнах с динамическими разделителями представления входят в один класс, как показано в части b рисунка Пользовательские интерфейсы с несколькими представлениями. В окнах со статическими разделителями представления могут входить в разные классы. Окна разделителей обоих типов поддерживаются классом CSplitterWnd.

Окна с динамическими разделителями с представлениями одного класса позволяют разделять окно на несколько областей с возможностью прокрутки разных областей для просмотра различных частей документа. Пользователь может также отменить разделение окна, чтобы удалить дополнительные представления. Примерами являются окна разделителей, добавленные в пример Scribble . В этом разделе описывается способ создания окон с динамическими разделителями. Окно с динамическим разделителем показано в части b рисунка Пользовательские интерфейсы с несколькими представлениями.

Окна со статическими разделителями с представлениями разных классов представляют собой окно, разделенное на области, каждая из которых предназначена для разных целей. Например, в редакторе точечных рисунков Visual C++ в окне изображения две области располагаются рядом друг с другом. В левой области точечный рисунок отображается в натуральную величину. В правой области этот же рисунок отображается в увеличенном виде. Области разделены полосой разделителя, которую можно перетаскивать, чтобы изменять размеры областей. Окно со статическим разделителем показано в части c рисунка Пользовательские интерфейсы с несколькими представлениями.

Дополнительные сведения см. в разделе о классе CSplitterWnd в справочнике по библиотеке MFC и в разделе Примеры MFC.

См. также

Архитектура документа и представления