TN025. Создание документов, представлений и фреймов

Примечание.

Следующее техническое примечание не было обновлено, поскольку сначала оно было включено в электронную документацию. В результате некоторые процедуры и разделы могут быть устаревшими или неверными. Для получения последних сведений рекомендуется выполнить поиск интересующей темы в алфавитном указателе документации в Интернете.

В этом примечании описываются проблемы создания и владения для WinApps, DocTemplates, Documents, Frames и Views.

WinApp

В системе есть один CWinApp объект.

Она создается статически и инициализирована внутренней реализацией WinMainплатформы. Для выполнения CWinApp каких-либо полезных действий (исключение: библиотеки DLL расширения MFC не должны иметь CWinApp экземпляр — инициализация выполняется вместо DllMain этого).

CWinApp Один объект владеет списком шаблонов документов (aCPtrList). Для каждого приложения существует один или несколько шаблонов документов. DocTemplates обычно загружаются из файла ресурсов (т. е. строкового массива) в CWinApp::InitInstance.

pTemplate = new CDocTemplate(IDR_MYDOCUMENT, ...);

AddDocTemplate(pTemplate);

Один CWinApp объект владеет всеми окнами кадров в приложении. Главное окно фрейма для приложения должно хранитьсяCWinApp::m_pMainWnd; обычно m_pMainWnd в InitInstance реализации, если вы не позволили AppWizard сделать это для вас. Для единого интерфейса документа (SDI) это тот CFrameWnd , который служит главным окном фрейма приложения, а также единственным окном фрейма документа. Для нескольких интерфейсов документов (MDI) это MDI-Frame (класс CMDIFrameWnd), который служит в качестве основного окна фрейма приложения, содержащего все дочерние CFrameWnds. Каждое дочернее окно имеет класс CMDIChildWnd (производный от CFrameWnd) и служит одним из потенциально многих окон фреймов документов.

DocTemplates

Создатель CDocTemplate и менеджер документов. Он владеет документами, которые он создает. Если приложение использует описанный ниже подход на основе ресурсов, он не должен быть производным от CDocTemplate.

Для приложения SDI класс CSingleDocTemplate отслеживает один открытый документ. Для приложения MDI класс CMultiDocTemplate сохраняет список (a CPtrList) всех открытых в настоящее время документов, созданных из этого шаблона. CDocTemplate::AddDocument и CDocTemplate::RemoveDocument укажите функции виртуальных членов для добавления или удаления документа из шаблона. CDocTemplate — это друг, CDocument поэтому мы можем задать защищенный CDocument::m_pDocTemplate указатель назад к шаблону документа, который создал документ.

CWinApp обрабатывает реализацию по умолчанию OnFileOpen , которая, в свою очередь, запрашивает все шаблоны документов. Реализация включает поиск уже открытых документов и определение формата открытия новых документов в.

CDocTemplate управляет привязкой пользовательского интерфейса для документов и кадров.

CDocTemplate сохраняет количество неназванных документов.

Cdocument

A CDocument принадлежит объекту CDocTemplate.

В документах есть список открытых представлений (производных от CView), которые просматривают документ (a CPtrList).

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

RemoveView Интерфейс CDocument::AddViewиспользуется для поддержания списка представлений. CDocument это друг, CView чтобы мы могли установить CView::m_pDocument указатель назад.

CFrameWnd

A CFrameWnd (также известный как кадр) играет ту же роль, что и в MFC 1.0, но теперь CFrameWnd класс предназначен для использования во многих случаях без получения нового класса. Производные классы CMDIFrameWnd и CMDIChildWnd также улучшены так много стандартных команд уже реализованы.

Ответственность CFrameWnd за создание окон в клиентской области кадра. Обычно есть одно главное окно, заполненное клиентской областью кадра.

Для окна MDI-Frame область клиента заполняется элементом управления MDICLIENT, который в свою очередь является родительским из всех окон фреймов MDI-Child. Для окна SDI-Frame или окна фрейма MDI-Child область клиента обычно заполняется производным CViewобъектом окна. В случае CSplitterWnd, клиентская область представления заполняется CSplitterWnd объектом окна, а CViewпроизводные объекты окон (по одному на разделенную область) создаются в качестве дочерних CSplitterWndокон.

См. также

Технические примечания по номеру
Технические примечания по категории