Иллюстрированный самоучитель по Visual Studio.Net

         

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


Библиотека 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()

};



Содержание раздела