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
), который служит в качестве основного окна фрейма приложения, содержащего все дочерние CFrameWnd
s. Каждое дочернее окно имеет класс 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
окон.
См. также
Технические примечания по номеру
Технические примечания по категории