本对象 要通知的对象/动作 使用的成员函数
CView 对象 通知文档更新所有视
CDocument::UpdateAllViews
CDocument 对象 更新一个视 CView::OnUpdate
CFrameWnd 或
CMDIFrameWnd 对象
通知一个视为活动视
CView::OnActivateView
设置一个视为活动视 SetActivateView
可以通过表 5-2 得到相关对象,再调用表 5-3 中相应的函数。例如:视在接受了新数据或者
数据被修改之后,使用表 5-2 中的函数 GetDocument 得到关联文档对象,然后调用表 5-3 中
的文档函数 UpdateAllViews 更新其他和文档对象关联的视。
在表 5-2 和表 5-3 中,CView 对象指 CView 或派生类的实例;成员函数列中如果没有指定
类属,就是第一列对象的类的成员函数。
5.2 MFC 提供的接口
MFC 编程就是把一些应用程序特有的东西填入 MFC 框架。MFC 提供了两种填入的方法:
一种就是使用前一章论述的消息映射,消息映射给应用程序的各种对象处理各种消息的机
会;另一种就是使用虚拟函数,MFC 在实现许多功能或者处理消息、事件的过程中,调用
了虚拟函数来完成一些任务,这样就给了派生类覆盖这些虚拟函数实现特定处理的机会。
下面两节将列出两类接口,有两个目的:一是为了让读者获得整体印象,二是后文将涉及
到或者讨论其中的许多函数时,不显得突兀。
5.2.1 虚拟函数接口
几乎每一个 MFC 类都定义和使用了虚拟成员函数,程序员可以在派生类中覆盖它们。一般,
MFC 提供了这些函数的缺省实现,所以覆盖函数应该调用基类的实现。这里给出一个
MFC 常用虚拟函数的总览表(见表 5-4),更详细的信息或它们的缺省实现动作参见 MFC 文
档。由于基类的虚拟函数被派生类继承,所以在派生类中不作重复说明。
覆盖基类的虚拟函数可以通过 ClassWizard 进行,不过,并非所有的函数都可以这样,有的
必须手工加入函数声明和实现。
表5-4 常见MFC类的虚拟函数接口
类 虚拟函数 覆盖的目的和功能
CCmdTarget OnCmdMsg
发送、派发命令消息
OnFinalRelease OLE 用途,引用为 0 时作清理工
作
CWinThread ExitInstance
在线程退出时作清理工作
InitInstance 在线程开始时作初始化
OnIdle
执行 thread-specific idle-time 处理
PreTranslateMessage 在 消 息 送 给 Windows 函 数
TranslateMessage and