一、在InitInstance函数中添加多个文档模板
m_pTemplateSchematicView = new CMultiDocTemplate(IDR_CTEMATYPE,
RUNTIME_CLASS(CCTEMADoc),
RUNTIME_CLASS(CChildFrame), // 自定义 MDI 子框架
RUNTIME_CLASS(CCTEMAView));
if (!m_pTemplateSchematicView)
return FALSE;
AddDocTemplate(m_pTemplateSchematicView);
m_pTemplateDataView=new CMultiDocTemplate(
IDR_CTEMATYPE,
RUNTIME_CLASS(CCTEMADoc),
RUNTIME_CLASS(CChildFrame),
RUNTIME_CLASS(CDataView));
AddDocTemplate(m_pTemplateDataView);
二、添加菜单命令处理函数,打开窗体
void CCTEMAApp::OnNew1()
{
// TODO: 在此添加命令处理程序代码
m_pTemplateDataView->OpenDocumentFile(NULL);
}
void CCTEMAApp::OnNew2()
{
// TODO: 在此添加命令处理程序代码
m_pTemplateSchematicView->OpenDocumentFile(NULL);
}
三、处理Doc类的OnNewDocument函数
添加私有函数
CFrameWnd * CreateNewWindow(CDocTemplate *pTemplate,CDocument *pDocument)
{
ASSERT_VALID(pTemplate);
ASSERT_VALID(pDocument);
CFrameWnd* pFrame=pTemplate->CreateNewFrame(pDocument,NULL);
if(pFrame==NULL)
{
TRACE0("Warning:failed to create new frame.\n");
return NULL;
}
CRect rect;
GetClientRect(pFrame->m_hWnd,&rect);
pFrame->MoveWindow(0,0,rect.Width(),rect.Height());
ASSERT_KINDOF(CFrameWnd,pFrame);
pTemplate->InitialUpdateFrame(pFrame,pDocument);
return pFrame;
}
BOOL CCTEMADoc::OnNewDocument()
{
if (!CDocument::OnNewDocument())
return FALSE;
// TODO: 在此添加重新初始化代码
// (SDI 文档将重用该文档)
CCTEMAApp * p_app=(CCTEMAApp*)AfxGetApp();
CreateNewWindow(p_app->m_pTemplateSchematicView,this);
CreateNewWindow(p_app->m_pTemplateDataView,this);
return TRUE;
}