单文档:SDI
一个应用程序一次只能打开一个文档,如记事本,一个记事本窗口只能打开一个文档,新建时会覆盖之前的。
多文档:MDI
可打开多个,如word.
对话框、单文档、多文档区别
对话框模板适合于做交互界面
文档模板适合于做文件处理
多文档模板适合于做多文件处理
文档五个重要类:(文档/视图框架)
CWinAPP:应用程序对象,负责初始化程序(进程启动终止),保存视图与文档等对象间的关系,处理消息循环、将消息调度到需要的目标窗口,命令行参数。
CFrameWnd:框架窗口对象,提供一个应用程序主窗口。包含菜单,工具条,最大小化按钮,标题栏,系统菜单,视图的显示及位置等。许多默认为MFC应有的功能都是在该类中实现。
CDocument:存视图空白区数据。通常保存在它的成员变量中。
- 重要函数:
- UpdateAllViews():该函数调用各个视图的OnUpdate()
- SetModifiedFlag()
还可由函数GetFirstViewPosition()获得视图指针,对其操作
CView:视图对象。(显示文档类数据)类基类为CWnd,所以它具有CWnd所有功能如创建、移动、显示、隐藏窗口。CView可以接受所有windows消息,而CDocument不行。它实现文档类需要的功能,如可获得指向文档类的指针:GetDocument(),再获取文档类成员变量就获得数据了。
- 重要函数:
- OnDraw():并不显示调用,通常由Invalidate(),updateAllView()等函数调用。
CDocTemplate:将独立的文档、视图、框架对象联系起来,每一种类型文档对应一个文档模板,它管理该类型所有文档。文档、视图、框架对象都由它创建。它实现文档类需要的功能。如建立保存文档,获取文档字符串GetDocString()等。
在应用程序类的InitInstance()中:p284
CSingleDocTemplate *tmp=new CSingleDocTemplate(…)
消息映射
本质上是一个数组,保存:
- 所处理的消息
- 消息应用的控件ID
- 消息传递的参数
- 返回值
一般用类向导定义,手动添加的话是在BEGIN_MASSAGE_MAP与END_MESSAGE_MAP宏之间添加ON_COMMAND(应用控件ID,CView::OnChange),第二个参数为添加消息映射的类的成员方法。
SDI程序的消息传递过程:
(1)WM_COMMAND消息:按视图、文档、模板、框架窗口、应用程序对象、默认的DefWindowProc传送,一旦一个对象接收了就不会再往后传。
(2)标准windows消息如键盘鼠标消息传给视图,大多其它消息传给框架窗口,文档对象和应用程序对象从不接收非命令消息。
编程实例:
(1)新建基于单文档的MFC项目,命名为SingleDocument。
<