深入浅出MFC学习笔记(第7章:简单而完整的MFC骨干程序)
来源:互联网 发布:做微信小视频的软件 编辑:程序博客网 时间:2024/05/12 16:15
第七章简单而完整的MFC骨干程序。
这一章主要是剖析有AppWizard产生的完整的MFC骨干程序。
首先要熟记MFC类层次结构,这是理解MFC构建的前提。
MFC层次结构图:文档视图结构是MFC进化为应用程序框架的灵魂,在MFC中CDocument负责处理数据,它只是个空壳,我们可以重写Serialze函数,派生符合我们需求的类。与CDocument相辅相成的是CView类,它是负责数据得显示的类,同时它还负责程序与使用者之间的交互。使用者对数据的修改都需要依赖CView类的响应。
有关文件读写的操作是由CDocument中的Serilize虚函数负责的。有关显示的操作是在CView中的OnDraw虚函数中处理的。当我们派生自己的两个类CMyDoc和CMyView,只要把所有精力花在CMyDoc::Serialize和CMyView::OnDraw身上就可以了。
先介绍Document Template,在文档视图结构中,虽然CView负责显示,但是它的外围必须有一个外框窗口作为舞台。也可以说Document Template是View窗口的一个容器,数据,数据的显示,以及容纳数据显示的窗口,它们是一体的。缺一不可。
程序每打开一个文件就应该产生三个对象:
1:CDocument对象。
2:CView对象。
3:外框窗口CMDIChildWnd对象。
这些对象是由Document Template对象进行管理
如:CMultiDocTemplate *pDocTemplate=new CMultiDocTemplate ( IDR_SCRIBTYPE,
RUNTIME_CLASS(CMyDoc),
RUNTIME_CLASS(CChildFrame),
RUNTIME_CLASS(CMyView)
);
AddDocTemplate(pDocTemplate);
如果程序支持不同的文件格式,就需要不同的CMultiDocTemplate 。它的第一个参数,表示此文件类型所使用的资源,如ICON,MENU和字符串资源。字符串资源用以完整描述文件类型。这可以在程序中获得,通过调用CDocTemplate::GetDocString。
RUNTIME_CLASS是一个宏,返回传递来的类中的CRuntimeClass静态对象。因此,每当使用者打开一份文件,Document template就能根据此创建三个对象,打开并显示相应文件。
因此在CMyWinApp的InitInstance中首先new了一个CMultiDocTemplate 对象,它用于管理Document,view和Frame窗口。
LoadFrame用于产生主窗口并加载菜单,同时制定窗口标题、文件标题、扩展名等。LoadFrame内部将调用Create,后者将调用CreateWindowEx,触发WM_CREATE消息。
一份Document可以映射给多个View显示,使用者对Document的任何操作都必须通过Document Frame窗口,消息随后传到CView。
构建主窗口有两个步骤,首先new一个CMDIFrameWnd对象,然后调用其LoadFrame函数,在此函数内会调用Create函数
- 深入浅出MFC学习笔记(第7章:简单而完整的MFC骨干程序)
- 深入浅出MFC学习笔记(第7章:简单而完整的MFC骨干程序)
- 深入浅出MFC学习笔记4--简单而完整:MFC骨干程序
- 简单而完整:MFC骨干程序(深入浅出MFC之读书笔记)
- 深入浅出MFC学习笔记(第6章 :MFC程序的生死因果)
- 深入浅出MFC学习笔记(第6章 :MFC程序的生死因果)
- 深入浅出MFC学习笔记(第6章 :MFC程序的生死因果)
- 学习笔记之深入浅出MFC 第5章 Windows程序的生与死
- MFC骨干程序
- MFC骨干程序
- 学习笔记之深入浅出MFC 第7章 进程与线程(Process and Thread)
- 深入浅出MFC学习笔记:MFC六大关键技术仿真之MFC程序的初始化过程
- 学习笔记之深入浅出MFC 第6章 Console程序介绍
- MFC学习笔记一 最简单的MFC程序
- 《深入浅出mfc》学习笔记
- 《深入浅出mfc》学习笔记
- 《深入浅出MFC》学习笔记
- 深入浅出MFC学习笔记3--MFC程序流程
- 数字图像处理的企业有哪些?
- 一篇好文章:经营好自己的生活,别人才会想靠近
- Oracle 创建索引的基本规则总结
- 我的第一篇博文
- 制图排版的终极武器-自定义Element
- 深入浅出MFC学习笔记(第7章:简单而完整的MFC骨干程序)
- 黑客必备工具分类大全(精)
- Xcode调试相关
- 提问的艺术(中文版)
- Objective-C的setter和getter
- hook iat改变Messagebox
- 【早起一水】HDU——1201 18岁生日
- Useful website
- 十年积累)div+css 完全兼容ie6 ie7 IE8 IE9 和firefox方法