參考:http://blog.csdn.net/segen_jaa/article/details/8489917
應用背景:
我用的是MDI框架,需要調用同事給的dll,才能確定本程序解析何種格式的文件。如他給了dll1,dll2,dll3,dll4,后綴分別是.format1,.format2,.format3,.format4。以后還可能會有(dll5,format5),(dll6,format6)
因此在MDI加載文檔模板之前就要獲得全部后綴名,然后動態的傳給MDI。
首先,需要修改打開文件的后綴名。需要重載CMultiDocTemplate,參考文章的后綴也是在主程序中寫好的,不是我想要的,
很簡單,在繼承類中多加一個參數 char *suffix,
具體實現如下:
[cpp] view plain copy
- #pragma once
- #include "afxwin.h"
-
- class CMultiDocTemplateSuffixEx : public CMultiDocTemplate
- {
- CString m_strSuffix;
- public:
- CMultiDocTemplateSuffixEx(char *suffix,UINT nIDResource, CRuntimeClass* pDocClass,
- CRuntimeClass* pFrameClass, CRuntimeClass* pViewClass):\
- CMultiDocTemplate( nIDResource, pDocClass, pFrameClass, pViewClass )
- {
- m_strSuffix.Format("%s",suffix);
- }
-
- virtual BOOL GetDocString(CString& rString, enum DocStringIndex index) const
- {
- if(index == CDocTemplate::filterExt)
- {
- rString = "."+m_strSuffix;
- }
- else if( index == CDocTemplate::fileNewName || index == CDocTemplate::filterName )
- {
- rString = m_strSuffix+"(*."+m_strSuffix+")"; }
- else
- {
- __super::GetDocString(rString,index);
- }
- return TRUE;
- };
- };
使用:
[cpp] view plain copy
- CMultiDocTemplate *pDocTemplate0;
- char *curSuffix[]={"format1","format2","format3"};
- for(int i=0; i<3; i++)
- {
- pDocTemplate0 = new CMultiDocTemplateSuffixEx
- (curSuffix[i],IDR_MAINFRAME,
- RUNTIME_CLASS(CTestDoc),
- RUNTIME_CLASS(CChildFrm),
- RUNTIME_CLASS(CTestView));
- AddDocTemplate(pDocTemplate0);
-
- }
- }