当前课程知识点:VC++面向对象与可视化程序设计(下):MFC编程基础 > 第9章 单文档与多文档 > 9-3 文档操作中的一些重要概念 > Video
返回《VC++面向对象与可视化程序设计(下):MFC编程基础》慕课在线视频课程列表
返回《VC++面向对象与可视化程序设计(下):MFC编程基础》慕课在线视频列表
好!我们下面介绍文档操作中的一些重要概念
文档操作要涉及串行化处理
文档的消息映射
和文档消息的传递
首先我们说串行化处理
串行化就是将对象写入字节流
和从字节流恢复对象的操作
那串行化代码就是Serialize
这里就是有一个参数是CArchive
这里面有一个&表示引用调用
也就是说函数对ar这个变量的操作是会改变ar的值的
如果没有&这个引用调用符
函数对ar的操作是不会改变ar的值的
ar是CArchive的对象
那么ar.IsStoring就判断是否保存
如果是保存就增加保存的代码
如果不是就增加加载的代码
那么这是一个串行化处理的一个代码构架
那CArchive类的常用成员它是非常多的
大家知道在进行串行化处理时
通常是通过CArchive类来完成的
那么它的常用成员比如说有WriteString
写入字符串
ReadString 读取字符串
比如说ReadClass、WriteClass
读取或写这个类的信息
m_pDocument这是使用该档案的文档
Read跟Write是读取字节的内容或者写入字节的内容
以及这个operator<<这是将基本类型写入这个流中
operator>>这个箭头方向不一样是读取
这里有一个IsStoring
就是是判断是否处于保存状态
以及ReadObject和WriteObject
是读取串行化和写入串行化对象
这是常用的CArchive类的成员
那文档的消息映射呢
实际上我们并不陌生
我们通常使用类向导来添加消息映射
但有时这个类向导并不支持某些类的消息映射
也就是说仅仅靠类向导生成的宏是不够的
而是需要自己添加一些自定义的宏
这个时候就需要手工添加消息映射代码
那么关于这个问题
实际上我们在上一讲里面有一个介绍例题里面已经接触到这个问题
那么消息映射呢
本质上它是一个数组
MFC使用这个数组来确定消息传递时
具体要传递给哪一个函数
那既然是这样的话呢
这个数组中存储的信息就包括
消息应用于控件的ID
或者说ID范围
上一讲里面我们介绍的那个颜色范围
红绿蓝
实际上就是一个ID范围
那么数组还有所处理的消息
消息所传递的参数
以及消息所期望的返回值
那通用的宏呢
比如说ON_COMMAND
那么就是处理WM_COMMAND消息
它记录ID和映射的就是ID绑定的函数
这就是对于COMMAND宏的响应
对一个ID范围的WM_COMMAND消息的响应
这个我们上一讲通过例子红绿蓝这个颜色变化
大家已经掌握到了
那么这个参数里面
第一个参数是第一个ID
第二个参数是最后一个ID
那么它映射了一个函数
或者它绑定了一个函数
那这个是ON_UPDATE_COMMAND_UI呢
是用于处理MFC的请求
用于更新界面状态
那么这个ON_UPDATE_COMMAND_UI_RANGE呢
和上面一样
也是用于更新页面状态
只是说它ID是一个范围
ON_NOTIFY是用来处理来自控件的WM_NOTIFY消息
那么第一个代码Code就是NOTIFY的消息代码
第二个就是ID控件
第三个就是它绑定的函数
那么这个也是通知宏的一个范围
ON_CONTROL以及CONTROL的范围
那大家注意到这里面很有意思的就是
很多命令
比如说COMMAND命令
它还有一个COMMAND范围
UPDATE_COMMAND_UI呢也有一个UPDATE_COMMAND_UI_RANGE这个范围
NOTIFY命令
它也有一个NOTIFY的RANGE范围
包括CONTROL也有一个CONTROL范围
为什么会这样呢
那么就是因为如果同类控件很多的情况下
我们为了方便处理
不要一一对每一个控件进行响应
那么我们针对控件范围的变化
根据它的变化进行响应就可以了
这样呢 编写你的代码就简单多了
然后这个是ON_MESSAGE是处理任意消息
包括用户自定义的消息
这是消息的ID以及消息的处理函数
那么这个是ON_REGISTERD_MESSAGE
处理使用WindowMessage注册的消息
那么从刚才介绍的来看
以上的宏的格式都是
ON_一个什么样的消息
然后第一个参数
第二个参数
最后呢必须是一个函数
这个func代表的是对控件处理的函数
这个func必须为添加消息映射的类的成员方法
包括它的父类方法
那有时候我们需要手工地添加消息映射
那么就是在BEGIN_MESSAGE_MAP跟END_MESSAGE_MAP之间增加
那么这个呢
我们在上一讲的例题里面
大家已经有体会啦
最后就是在类声明部分里要声明这个成员方法
在类实现部分要实现这个成员方法
那么这个关于消息宏的定义格式问题
那我们再介绍文档的消息传递
由于用户可以在很多的MFC类中映射同一个消息
如可以在文档和视图中同时映射打开文件的消息
这样就需要消息有明确的来源
也有明确的接收者
因此需要判断消息传递的顺序
它传递顺序是这样的
从当前视图
到当前文档
到与当前视图文档关联的文档模板
然后再到子框架窗口
那么对于子框架窗口
单文档是没有子框架的
多文档才有
然后再回到主窗口框架
最后到应用程序
它们是沿着这么一条路径来进行传递的
-讨论实录
--0-0
-6-1 MFC概述
-6-2 C++的基本知识
--6-2-1 类
--6-2-2 对象
--6-2-6 重载
--6-2-9 指针
-6-3 MFC类的组织结构及主要的类的简介
--6-3-2 根类
-6-4 MFC中全局函数和全局变量
-7-1 概述
--7-1-1
--7-1-2
-7-2 按钮控件及其应用
--128B12447816EEF99C33DC5901307461
-7-3 按钮控件及其应用
--7-3
-7-4 静态控件
--7-4
-7-5 列表框控件
--7-5-1
--7-5-2
-7-6 编辑框控件
--7-6
-7-7 组合框控件
--7-7
-7-8 对话框通用控件
--7-8-1
--7-8-2
-讲义源代码
--html
-8-1&2 资源的应用以及菜单资源的使用
--8-1-1
--8-1-2
-8-3 快捷菜单的创建及其应用
--8-3
-8-4 加速键资源的创建及其使用
--8-4
-8-5 工具条资源的创建及其使用
--8-5
-8-6 字符串资源的使用
--8-6
-8-7 位图资源的创建及其使用
--8-7
-课堂示例源代码
--html
-第一次作业内容及要求
--html
--第一次作业及答题链接--作业
-9-1 概述
--9-1
-9-2 Doc/View框架的主要成员
--Video
-9-3 文档操作中的一些重要概念
--Video
-9-4 SDI编程实例
--Video
-9-5 MDI编程实例
--9-5-1
--9-5-2
-课堂示例源代码
--html
-第二次作业内容及要求
--html
--第二次作业及答题链接--作业
-10-1 利用音频函数实现多媒体程序设计
--10-1-1
--10-1-2
--10-1-3
--10-1-4
-10-2 利用Windows Media Player控件实现多媒体程序设计
--10-2
-课堂示例源代码
--html
-例11-1
--例1
-例11-2
--例11-2
-例11-3
--例11-3
-例11-4
--例11-4
-11-1 ODBC介绍与引用
--11-1
-课堂示例源代码
--html
-第三次作业及答题链接