Документ и его представления
Библиотека MFC предоставляет 3 различных способа создания окон-рамок, обрамляющих представления. Два явных способа: вызов методов CFrameWnd::Create или CFrameWnd::LoadFrame и один неявный – путем создания шаблона документа. Класс MFC-приложения в рамках многодокументного интерфейса (MDI) поддерживает динамический список шаблонов документов, то есть объектов класса CMultiDocTemplate. Каждый из них управляет оркестром из четырех музыкантов: ресурсы, документ, связанное с ним представление и обрамляющее его окно-рамка.
Этот квартет составляется в момент создания нового объекта CMultiDocTemplate внутри метода initinstance класса приложения, в нашем случае СТгееАрр. Найдите это место в программе и убедитесь, что параметрами конструктора являются перечисленные музыканты:
CMultiDocTemplate* pDocTemplate; //====== Создание шаблона документов pDocTemplate = new CMultiDocTemplate(IDR_TreeTYPE, RUNTIME_CLASS(CTreeDoc), // документ RUNTIME_CLASS(CTreeFrame), // окно-рамка RUNTIME CLASS(CLeftView)); // представление //====== Вставка адреса шаблона в динамический список AddDocTemplate(pDocTemplate);
Мы можем при желании поменять состав квартета, но должны оставить неизменным количество его исполнителей. В наши цели входит создание еще одной новой комбинации. Тот же документ будет связан с другими ресурсами IDR_DrawTYPE, другим представлением (CDrawView) и другой рамкой (CDrawFrame).
Так как мы хотим управлять обоими квартетами, то удобно запомнить в классе приложения их адреса и пользоваться ими при необходимости создать новое или активизировать существующее окно MDI-документа. Введите в состав класса CTreeApp две public-переменные, которые будут хранить эти адреса. С учетом незначительных сокращений интерфейс класса должен иметь такой вид:
class CTreeApp: public CWinApp { public: //====== Два шаблона документов CMultiDocTemplate *m_pTemplDraw; CMultiDocTemplate *m_pTemplTree; CTreeApp (); virtual BOOL Initlnstance(); afx_msg void OnAppAbout(); DECLARE_MESSAGE_MAP() };