程序类型SDI(单文档)MDI(多文档)对话框从理想的面向对象的程序设计看,应该采用虚函数以实现多态性。但这里没有采用虚函数,而是采用消息映射来模拟虚函数实现的功能。主要原因是大多数

程序类型

SDI(单文档)

MDI(多文档)

对话框

从理想的面向对象的程序设计看,应该采用虚函数以实现多态性。但这里没有采用虚函数,
而是采用消息映射来模拟虚函数实现的功能。主要原因是大多数窗口只处理少量的消息,而采
用虚函数来处理消息需要相对庞大的虚函数表,系统开销要大得多。
在MFC中ClassWizard会引导用户给所在类添加与消息映射相关的成员变量和成员函数。
下面总结MFC命令消息的传递过程。MFC对于消息循环的规定如下:
(1)如果是普通的Windows消息,则一定由派生类流向基类,不会有迂回。
(2)如果是命令消息(WM_COMMAND),则路径十分复杂,下面总结消息的传递。
MFC为命令消息搜索相应消息处理函数的过程是:首先将由菜单、工具栏等用户界面对象
产生的命令消息送给主框架窗口的标准MFC窗口函数;然后,窗口函数将命令传给MFC主框
架窗口对象,进行命令消息的派送,并按表2.4的次序进行消息匹配。若找不到,则先继续搜索
其基类的消息映射入口表,若都找不到,再迂回到下一个对象进行处理。

表2.4 命令消息的迂回搜索路径

路径

当前视图→当前文档→文档模板→主框架窗口→应用程序对象

当前视图→当前文档→创建文档的文档模板→活动的子框架窗口→主框架窗口→
应用程序对象

当前对话框→对话框的父窗口→应用程序对象

最后,如果都找不到,则由默认的Windows消息处理函数结束该命令消息。
为了提高消息匹配的效率,MFC内部有一个消息缓冲池,使用以消息值为关键字的散列(哈
希)查找,池中可存放512条最近使用过的消息映射入口表项的有关信息(注意只需放入口表项,
即两个指针)。只有在消息缓冲池中匹配不到时才进行上面所叙的搜索过程。

2.7 MFC中的文件处理

本小节从两个方面来介绍MFC中的文件系统,也可以说是广义的文件系统。先介绍MFC
的文档/视图结构(document/view),再介绍序列化(serialization)与永久保存。

2.7.1 文档/视图结构

文档(document)指的是数据组合的抽象,它通常对应磁盘文件,也可以对应I/O端口(包括
打印机、键盘)或一块内存空间(申流)。
同样的数据,可以用不同的方式来表示。比如某公司的经营业绩统计可以用统计表格来表
示,也可以用直方图来表示,还可以用饼图来表示。实际上不需要保存这些具体形式下的数据,
这样做太浪费存储空间,图形比文本占用的存储空间要大得多。只需把原始数据放在文件或数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值