nIdle()函数执行一些处理,然后返回一个非零值,表示它还需要被调用,以进行进一
步处理。
? 消息循环再次检查消息队列,如果没有未处理的消息,则再次调用OnIdle()函数,增
加lCount 参数。
? OnIdle()函数结束所有的空闲任务并返回0,这告诉消息循环停止调用OnIdle()函数直
到在消息队列中接收到下一条消息为止,在那时,空闲循环将重新启动,而参数被设
为0。
由于只有在OnIdle 返回之后应用程序才能处理用户输入,因此在OnIdle 中不应执行较
长的任务。
注意:OnIdle 除可实现更新用户接口对象(如菜单项和工具条等)外,还实现了内部数据结构的
清理。因此,如果重载了OnIdle 函数,必须用重载版本中使用的lCount 值来调用
CWinApp::OnIdle。首先调用所有基类的空闲处理(即直到基类的OnIdle 返回0),如果需
要在基类处理完成之前进行一些工作,则应重复基类的实现以在工作期间选择一个合适的
lCount 值。
2.4 文档类和视图类
MFC AppWizard 自动生成的应用程序默认采用文档-视图结构,因为一般应用程序都要
对某种文档进行处理(文档并不一定是文件,但通常可以理解为文件),而文档又通过视图与
用户打jiāo道(或称jiāo互),文档的内容通过视图窗口显示给用户,用户在视图中对文档所作的
修改由视图通知文档对象,视图实际上充当了一个中介者的角色。
下面将对文档视图结构中文档类和视图类及它们的相互关系作相应介绍。
2.4.1 文档类
文档类(CDoccomnt)在MFC 类库中的层次结构如图2-17 所示。
图2-17 CDoccomnt 在MFC 类库中的位置
不管是SDI 应用程序还是MDI 应用程序,文档类都是从CDoccomnt 类派生出来的,
枫叶文学网www.fywxw.com
Visual C++ 6.0 程序设计从入门到精通
·24·
App Wizard 自动生成的文档类为HelloMFCDoc,其定义在文件HelloMFCDoc.h 中,实现在
HelloMFCDoc.cpp 中。
若要使用AppWizard 提供的文档类,必须执行下列cāo作。
? 为每个文档类型从Cdoccomnt 中派生一类。
? 添加成员变量以存储每个文档的数据。
? 在文档类中重写CDoccomnt 的Serialize 成员函数,Serialize 用于从磁盘读取文档的数
据和将文档数据写入磁盘。
? 可能还需要重写其他CDoccomnt 成员函数,如经常需要重写OnNewDoccomnt 和
OnOpenDoccomnt 以初始化文档的数据成员、重写DeleteContents 以动态销毁分配的数
据。
在HelloMFCDoc 类中,主要重载了基类的两个函数:OnNewDoccomnt()和Serialize()。
其中OnNewDoccomnt()