精通
英语
和
开源
,
擅长
开发
与
培训
,
胸怀四海
第一信赖
锐英源精品开源心得,转载请注明:“锐英源www.wisestudy.cn,孙老师作品,电话13803810136。”需要全文内容也请联系孙老师。英文原文
就理解MFC而言,首要目标是MFC的文档/视图架构,理解的方法要点在于用于控制互相关系的类。下面是这些类的关系图:
本图只是一个对框架的简单化的描述,它没有考虑视图类之间的差异性等等,这个差异框架也支持。
我们能够一眼看到只有一个CWinApp类的对象。这个对象包含有一个CDocManager对象,这个CDocManager对象是MFC里用来处理所有CDocTemplate对象,而CDocTemplate对象是通过框架注册的。CWinApp对象同样创建了CMainFrame对象,这个CMainFrame对象是程序的主窗口。每次程序里打开/创建个文档,一个对应类型的CDocument对象会创建。CDocument对象的指针会保存到对应的CDocTemplate对象内部的列表里,CDocTemplate对象在程序启动时按类型注册上。当你打开个文档,CMainFrame创建一个CChildFrame对象(一个MDI窗口),这个CChildFrame对象用于显示文档的视图。一个CView对象同样以CChildFrame的子窗口形式创建出来,它的指针保存到打开的文档对象的视图列表里。如果你创建你文档的额外的视图,额外的CChildFrame也会创建出来,里面寄生的有对应的视图。这个新的视图的指针也会保存到相关文档对象的视图列表里。
该MFC类并没有提供文档支持。MFC用它来管理CDocTemplate/CMultiDocTemplate的列表对象。在MFC应用里只有一个此类的对象。有需要,你也可以从它派生出你的CDocManager类,为了要实现派生,你必须在MFC创建它自己的成员变量前,创建和设置m_pDocManager成员。看如下的函数:
这个函数遍历CDocTemplate列表对象,检查文件的扩展名是否匹配这些CDocTemplate对象。如果匹配,且文件没有打开,会创建一个且打开,类型和匹配的CDocTemplate一样。在字符串资源里定义的文档类型会使用到创建文件的扩展名里。如果你以如下代码注册了CDocTemplate: