MFC构造可动态加载的文档模型
与实现主窗口插件的原理一样,我们还可以构造另一类基于.NET的插件对象用于加载文档模板。一个包含文档模板的.NET组件库与主窗口一样,也是一个基于MFC框架的动态链接库。手工建立这个库的过程与主窗口工程的建立类似:第一,需要一个支持托管扩展的MFC动态链接库工程;第二,需要一个辅助的基于文档的MFC程序工程;第三,将辅助工程中与文档相关的代码全部添加到动态链接库工程中。这个过程同样可以实现为一个集成的Wizard(在光盘中提供)。
步骤/方法
- 01
实现文档模板动态插入的代码如下: void ActiveDocTemplate(String* strExtImpl) { if(!g_pDotNetExtImpl) { ... CWinApp* pApp = AfxGetApp(); AfxSetResourceHandle(theApp.m_hInstance); CMultiDocTemplate* pDocTemplate; pDocTemplate = new CMultiDocTemplate( IDR_DocumentXDocTemplate3TYPE, RUNTIME_CLASS( CDocumentXDocTemplate3Doc), // custom MDI child frame: RUNTIME_CLASS(CChildFrame),
- 02
RUNTIME_CLASS( CDocumentXDocTemplate3View)); if (!pDocTemplate) return; CString strFileInfo,strFileExt; pDocTemplate->GetDocString(strFileInfo, CDocTemplate::filterName); pDocTemplate->GetDocString(strFileExt, CDocTemplate::filterExt); g_pDotNetExtImpl-> m_DocInfoDictionary[strFileInfo] = strFileExt; g_pDotNetExtImpl->m_pCurDocTemplate = pDocTemplate; pApp->AddDocTemplate(pDocTemplate); } }
- 03
从上述代码中可以看出,文档模板插件的目的就是实现一个从外部构造的模板,自然地插入到应用程序对象的文档模板队列以使得程序支持新的文档类型。