Документ
и его представления
Библиотека
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);
Мы можем при
желании поменять состав квартета, но должны оставить неизменным количество его
исполнителей. В наши цели входит создание еще одной новой комбинации. Тот же
документ будет связан с другими ресурсами I DR_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()
};