Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
41
Добавлен:
16.02.2016
Размер:
13.86 Mб
Скачать

Idr_app2type,

RUNTIME_CLASS(CApp2Doc),

RUNTIME_CLASS(CChildFrame), // custom MDl child frame

RUNTIME_CLASS(CApp2View)); AddDocTempIate(pDocTemplate);

//создание главного окна-рамки MDI-приложения CMainFrame* pMain Frame = new CMainFrame; if (!pMainFrame->LoadFrame(IDR_MAINFRAME)) return FALSE; mjMainWnd = pMainFrame;

// Далее расположен код разбора командной строки, как и для SDI-приложения

// Отображение и обновление главного окна-рамки

pMainFrame->ShowWindow(m_nCmdShow);

pMainFrame->UpdateWindow();

return TRUE; }

Листинг файла App2Doc.cpp:

// App2Doc.cpp : реализация класса CApp2Doc IMPLEMENT_DYNCREATE(CApp2Doc, CDocument)

BEGIN_MESSAGE_MAP(CApp2Doc, CDocument)

// ... END_MESSAGE_MAP()

CApp2Doc::CApp2Doc() // Конструктор

{ // TODO: add one-time construction code here

}

CApp2Doc::~CApp2Doc()

{}

BOOL CApp2Doc::OnNewDocument()

{ if (!CDocument::OnNewDocument()) return FALSE;

// TODO: add reinitialization code here return TRUE; }

void CApp2Doc::Serialize(CArchive& ar) { // Формируется код, как и для SDI-приложения }

Листинг файла MainFrm.cpp:

// MainFrm.cpp : реализация класса CMainFrame IMPLEMENT_DYNAMIC(CMainFrame, CMDIFrameWnd)

BEGIN_MESSAGE_MAP(CMainFrame, CMDIFrameWnd)

ON_WM_CREATE() END_MESSAGE_MAP()

CMainFrame: :CMainFrame() // Конструктор

{ // TODO: add member initialization code here

}

CMainFrame:: ~CMainFrame()

{}

Int cMainFrame: :OnCreate(lpcreatestruct lpCreateStruct)

{ if(CMDIFrameWnd::OnCreate(lpCreateStruct) ==-1) return-1;

if (!m_wndToolBar.Create(this) || !m_wndToolBar.LoadToolBar(IDR_MAINFRAME))

{ // ...

}

// Далее, как и для SDI-приложения

return 0; }

BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs) { //....

return CMDIFrameWnd::PreCreateWindow(cs); }

Листинг файла ChildFrm.cpp:

// ChildFrm.cpp : реализация класса CChildFrame IMPLEMENT_DYNCREATE(CChildFrame, CMDIChildWnd)

BEGIN_MESSAGE_MAP(CChUdFrame, CMDIChildWnd)

// ... END_MESSAGE_MAP()

CChildFrame::CChildFrame() // Конструктор { // TODO: add member initialization code here

}

CChildFrame::~CChildFrame() { }

BOOL CChiIdFrame::PreCreateWindow(CREATESTRUCT& cs)

{//...

return CMDIChildWnd::PreCreateWindow(cs);

}

Шаблон документа

Связь между классами приложения, окна-рамки, документа и отображения, а также используемый ресурс (в том числе и меню) устанавливается при создании шаблона документа. Шаблон документа определяет, как будет происходить создание новых документов. Более подробно классы шаблона документа были рассмотрены в предыдущей главе. В приведенном выше примере шаблон документа создается в методе Initlnstance класса САрр2Арр.

CMultiDocTemplate* pDocTemplate; // Создание шаблона документа pDocTemplate = new CMultiDocTemplate( IDR_APP2TYPE, RUNTIME_CLASS(CApp2Doc),

RUNTIME_CLASS(CChildFrame), // custom MDI child frame RUNTIME_CLASS(CApp2View)); AddDocTemplate(pDocTemplate);

Данный шаблон документа содержит ссылки на структуры, описывающие следующие три класса: CApp2Doc, CChildFrame, CApp2View. Когда пользователь выполнит действия для создания нового файла или открытия существующего (пункт меню File|New или File|Open), приложение вызовет метод CreateObject и создаст три объекта, используя классы шаблона документа. Будут созданы объект документ, объект окна-рамка и объект отображение.

Приложение может иметь не один шаблон документа. Метод AddDocTemplate добавляет созданный шаблон к списку шаблонов документов приложения.

Идентификатор ресурса (в нашем примере IDR_APP2TYPE) играет связующую роль между всеми разрабатываемыми ресурсами, с помощью редакторов ресурсов, и окнами документов. Для того чтобы различные дочерние окна имели разные меню, клавиши-акселераторы или пиктограммы, они должны иметь при создание шаблона документа и различные идентификаторы ресурса.

Новый идентификатор ресурса создается выполнением пункта меню View|Resource Symbols и щелчком в открывшемся диалоговом окне на командной кнопке New. Для каждого создаваемого вручную ресурса проекта следует также описать ресурсы, отображаемые в секциях вкладки Resources окна проекта. При этом идентификатор используемого в шаблоне документа ресурса во всех секциях вкладки Resources одинаков. При использовании нескольких шаблонов документа секции вкладки Resources будут содержать несколько идентификаторов ресурсов.

Соседние файлы в папке VC++Баженова