一、在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; }