当前课程知识点:VC++面向对象与可视化程序设计(下):MFC编程基础 > 第11章 > 例11-2 > 例11-2
返回《VC++面向对象与可视化程序设计(下):MFC编程基础》慕课在线视频课程列表
返回《VC++面向对象与可视化程序设计(下):MFC编程基础》慕课在线视频列表
好,我们继续,在上面的例题上我们增加功能
我们先回到刚才的例题
这个时候大家看到这里有个记录菜单,系统已经给你生成了4个菜单项
下一条记录,因为现在的当前记录是第一条记录
所以它不能回到第一条和第三条,只能是下一条
好了,我们仍然可以看到最后一条
那么在这种情况下,我们要增加三个菜单项
我们看一下该怎么做
那么这是基于单文档的应用程序
我想大家都比较熟悉了
我们直接调用菜单
资源在记录的地方,我们按要求增加三个菜单项
首先我们插入一个分隔符
然后增加删除一个记录菜单项
然后再增加一个“更新记录”和“清除域”菜单项
这个是“清除域”
好,我们增加了三个菜单项
那么增加了三个菜单项之后
我们就要给每个菜单项分配一个ID
我们来看看怎么分配ID
我们把这个删除一个记录
把它ID叫做ID_DELETE_RECORD
更新一个记录,我们也给他一个ID叫ID_UPDATE_RECORD
好,清除域,也给它交做ID_CLEAR_DOM
清除域,我们也给它增加了菜单项
然后我们要对这三个菜单项响应菜单命令
对前面两个响应UPDATE_COMMAND_UI命令
下面我们给它进行相应的消息响应的处理
我们添加函数
因为是单文档的文件,我们在视图里面操作
所以我们要选CMyll_1View,单击COMMAND相应COMMAND消息
推荐的函数名字是OnDeleteRecord
我们开始编辑OnDeleteRecord也就是删除记录的函数
大家跟我一起来看一下,这个OnDeleteRecord功能
首先我们定义了一个变量CRecordsetStatus,就是记录集状态的一个类的变量叫做m_cStatus
然后这里有一个try/catch构架,这个try/catch构架try的内容就是用户输入的信息的代码
这里就是delete删除,然后catch,这里是异常
这个异常代码放到CDBExcepion类型的指针,指向了字符串
然后,如果出错,就通过消息框把这个指针所指向的错误信息字符串给它显示在消息框里面去
如果操作失败,就将当前的指针移到第一条记录
这是对失败的处理
如果没有失败的话,我们获取当前的状态
GetStatus获取当前状态之后,我们要判断当前的状态是不是到了0
0的话,说明已经到了起始位置
移到了删除最后一条记录
如果删除最后一条记录,那么就移到开始状态
否则的话,如果我们删除了的话
我们的指针是指向下面一条记录
也就是说如果我现在指针处于第一条记录
那么我删除完后,指针仍指向最后一条记录
如果不是最后一条记录,我的指针就指向当前记录的下一条记录
那么,这是关于删除的操作
我们还要求响应Update_Command_UI消息
仍然在view里面,它系统推荐的是OnUpdataDeleteRecord
我们添加进行编辑
然后我们仍然响应它的代码
就是如果进入集移到最后一条就是IsEOF()或者说当前没有记录它的值就返回一个0
我们下面要做的就是要更新一个记录
我们仍然给它响应一个代码
更新,我们给它添加事件处理程序
然后仍然是找到视图的类
然后是COMMAND
在这里编写更新的代码
这里指针指向编辑框
先进行刷新
如果记录集可以更新就返回一个true,否则返回false
那么可更新的话那就对指针指向的记录进行更新
这里面更新的是编辑框的内容
这是把编辑框的内容更新到记录集里面去
同样的我们给它响应一个COMMAND_UI消息
我们添加消息处理函数
如果记录集在最后一条记录或者是没有当前记录
我们就返回一个非零值就是true
OnUpdateUpdateRecord是刷新记录集
最后还要响应清除域这个消息
清除域的消息,我们响应COMMAND
我们如何进行域的清除呢?
实际上,域的清除比较简单
只要把这个指针指向域设为空,然后刷新
这样就可以把域的内容清除掉了
那么我们下面运行一下这个应用程序
这个时候我们看一下
这个记录集我们移到最后一条是7
然后再移到上一条是6
再移到上一条是5,我说的是ID值,再上一条ID值是4
上一条是3,2,1,好了,1,再往前就走不了了
那么大家看到这里有几条记录?
我开始删除一条记录,删除当前的记录1,编号为1、作者为A的记录
我们把它删除了,删除一条记录
那么这时候大家看如果再往上一条记录是看不到记录的
因为是虚的不能操作
那么就是第一条ID为1的已经没有了
我们再看下一条3,4
我们把4这个记录也删除,大家看一下是什么效果?
4,删除
这个时候,如果上一条记录是3
如果移到下一条记录就是5,那么4已经没有了
那么删除记录的操作就是没有问题的
我们来更新一条记录
比如说现在ID为5、作者为B的话,我给它改为作者为A
我这个时候是更新一条记录
这时候我们看一看上一条记录是3
再看一下下一条记录作者变为A了
那么说明记录被更新了
如果说做清除域的话,就是把这些地方都清掉了
再也没有了
我们可以在这里重新输入
已经把域的内容已经清除了
好了,那么这个功能我们就完成到这儿
下面我们介绍重载函数OnMove
在VC的解决方案中我们可以调用OnMove函数来做一些操作
我们来看一下OnMove来做什么事情,实际上OnMove是用来移动记录的
我们下面重载一个OnMove的函数
下面我们主要是在视图里面,这个view里面进行重载
所以的话我们要找到OnMove函数
好,OnMove函数过来了,我们“确定”
然后我们可以编辑代码
那么OnMove里面,我们重载这个函数
我们先给它重载完
看,我们要做什么?
这个ID_RECORD_PREV就是说如果我们往前面一条记录查找
我们要判断是否要达到第一条记录
IsBOF()如果是的话,我们就没法再往前
如果非,那么我们可以往前面一条移动
那么如果移到第一条,很简单,直接就是MoveFirst()
如果移到下一条,我们要考虑是否是end of file(文件末尾)
因为刚开始是begin of file(文件起始)
因为如果已经是文件最后一条,再往下一条移是没法移动的
所以你要考虑是否到结束,如果不是的话,我们就往下一条移动
是的话,我们就不会往下一条移动
那么当前指针仍然保留在最后一条的位置
如果是last,那么就Move到last最后一条
缺省的情况是捕捉异常,如果异常的话,报告异常情况
所以实际上通过重载的话,使得向前操作,第一条操作、向后操作到最后一条操作更清晰了
-讨论实录
--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
-第三次作业及答题链接