MFC 多文档模板切换

你的app对象中给你自己的每个模板添加一个模板变量,保存你的所有模板。 
然后需要的时候直接使用模板变量来新建文件,不使用系统默认的   ID_FILE_NEW(把它从菜单删掉) 

//   MyApp.h 
class   CMyAPP...{ 
CMultiDocTemplate*   m_pTemplateAaa,   m_pTemplateBbb; 
...... 
} 

//   MyApp.cpp 
m_pTemplateAaa   =   new   CMultiDocTemplate( 
IDR_AAATYPE, 
RUNTIME_CLASS(CAaaDoc), 
RUNTIME_CLASS(CChildFrame),   //   custom   MDI   child   frame 
RUNTIME_CLASS(CAaaView)); 
AddDocTemplate(m_pTemplateAaa); 

m_pTemplateBbb   =   new   CMultiDocTemplate( 
IDI_MYFORM, 
RUNTIME_CLASS(CBbbDoc), 
RUNTIME_CLASS(CFormChild),   //   custom   MDI   child   frame 
RUNTIME_CLASS(CMyForm)); 
AddDocTemplate(m_pTemplateBbb   ); 


然后在菜单添加命令   ID_FILE_NEW_AAA、ID_FILE_NEW_BBB 
用ClassWizard添加对应的处理程序OnFileNewAaa、OnFileNewBbb 
void   CMyApp::OnFileNewAaa(){ 
            ASSERT_KINDOF(CMultiDocTemplate,   m_pTemplateAaa); 
            m_pTemplateAaa-> OpenDocumentFile(NULL); 
} 
void   CMyApp::OnFileNewBbb(){ 
            ASSERT_KINDOF(CMultiDocTemplate,   m_pTemplateBbb); 
            m_pTemplateAaa-> OpenDocumentFile(NULL); 
} 

以上代码在Visual   C++6.0   sp6中通过。

=======================================================
多模板切换,打开默认模板,可考虑重载 App::OnFileNew() 函数,添加如下代码即可:
	POSITION pos = m_pDocManager->GetFirstDocTemplatPosition();
	CDocTemplate* pDocTemplate = m_pDocManager->GetNextDocTemplate(pos);
	pDoctemplate->openDocumentFile(NULL);


你可能感兴趣的:(MFC)