if (!dopromptfilename(newname, afx_ids_openfile,
ofn_hidereadonly | ofn_filemustexist, true, null))
return; // open cancelled
afxgetapp()->opendocumentfile(newname); //实际也是调用文档模板的同名函数
}
(二)文档模板与文档之间的联系:
从上面看出应用程序对象对文件的新建和打开是依靠文档模板的opendocumentfile函数实现的。mfc的模板类是用来联系文档类、视类和框架类的,在它的构造函数就需要这三者的信息:
cdoctemplate ( uint nidresource, cruntimeclass* pdocclass, cruntimeclass* pframeclass, cruntimeclass* pviewclass );
构造函数利用后三个参数为它的三个cruntimeclass*类型的保护成员赋值:
m_pdocclass = pdocclass;
m_pframeclass = pframeclass;
m_pviewclass = pviewclass;
文档模板分为单文档模板和多文档模板两种,这两个模板的实现是不同的,除了上面的三个成员,内部有彼此不相同的但是很重要的成员变量。对于多文档模板:cptrlist m_doclist;,单文档模板:cdocument* m_ponlydoc;。它们都有一个成员函数adddocument,分别各自的成员进行赋值操作,而在它们的父类的cdoctemplate中则是为它所添加的文档的m_pdoctemplate变量赋值为模板自己的地址:
void cdoctemplate::adddocument(cdocument* pdoc)
{