当前课程知识点:VC++面向对象与可视化程序设计(下):MFC编程基础 > 第9章 单文档与多文档 > 9-4 SDI编程实例 > Video
返回《VC++面向对象与可视化程序设计(下):MFC编程基础》慕课在线视频课程列表
返回《VC++面向对象与可视化程序设计(下):MFC编程基础》慕课在线视频列表
好!下面我们通过一个例子给大家介绍SDI的编程
那上一讲里面大家已经略微地接触了一下SDI的编程
我们这个例子是这样的
在SDI里面要调用对话框
所以的话,例子复杂度就更高一点了
这个例子是这样的
在主窗口中的中央显示一个文本
“您好,单文档界面的例程!”
一个字符串
单击编辑菜单下面的“改变显示文本”这个菜单项
就弹出了Input对话框
通过这个对话框
可以改变主窗口中显示的文本的内容
我们要创建一个工程文件然后并建立一个对话框资源
创建的工程文件就叫做MySdi
然后添加对话框资源
那我们看怎么做
创建一个工程文件
这个工程文件叫MySdi
我现在给它放到D盘下面的VC++下面
选择单文档
这个文件扩展名、筛选器名字我们都不管它
直接“下一步”
它们自动让它缺省地生成
打印机这个选项可以暂时地不要
生成了一个应用程序的基本的框架
那我们创建了这个SDI以后
要添加一个对话框资源
所以在Dialog里面我们添加一个资源
新建一个对话框资源
对话框有一个ID
它叫IDD_DIALOG1
我们把这个对话框的Caption给它改成Input
系统生成了一个“确定”跟“取消”按钮
我们给它保留着
然后为这个对话框创建一个类
这个类,类的名字叫CDlgInput
这个类的定义是在DlgInput.h这个文件中
它的操作文件DlgInput.cpp中
好!我们按“确定”按钮
好了!这个时候大家看到我们增加了一个CDlgInput类
那么在这里,类的定义在这个地方
那么这个就是我们的对话框
好了,那这个时候我们要在上面添加一个编辑框
所以我们把工具箱打开
添加一个编辑框Edit Control
为这个编辑框要连接一个变量
因为我这个编辑框是用来
修改文档中的字符串的
所以的话呢,这个编辑框里面它保存的是字符串
所以的话,这时候我要给它连接一个变量
这个变量
应该是
CString类型的
因为存放的是字符串
选择“确定”按钮
那这样我们就给它连接了一个变量
我们给它做一个界面的调整
我们可以给它保存一下
那下面我们要做的事情应该是
为CMyDocSdi类添加成员变量
这个成员变量用于存放字符串
而这个字符串是在什么时候显示的呢?
是在我们程序运行时
刚才大家看到的
我们出现了一个字符串
在文档里面
为这个文档类定义一个变量
我们添加一个变量
那么这个变量
仍然是字符型的
所以我们用的是CString
CString变量的名字叫做m_str
好!我们现在为它连接了一个变量
那这个时候在这个地方CMySdiDoc类里面
就看到了这个变量
因为我们一打开文件就在这个文档界面看到了这个字符串
所以的话我们要进行文档变量的初始化
这时候文档变量的初始化是在文档CMySdiDoc.cpp这个文件里面
它有一个OnNewDocument成员函数
在这里面我们对刚才定义的变量进行初始化
那么我们打开MySdiDoc.cpp这个文件
然后我们找到OnNewDocument函数
在这里增加一个内容
如果OnNewDocument这是“非”
那么就没有成功
否则
我们就进行初始化
然后我们保存一下
然后我们还要进行串行化处理
在OnNewDocument里面这块儿给它增加了
这块儿的初始化代码
我们下面继续完成文档的串行化处理
我们现在是这样
要在编辑菜单中添加一个菜单项
“改变显示文本”
在编辑菜单里面我们增加一个
叫“改变显示文本”
对这个“改变显示文本”我们要定义它的ID
ID为ID_EDIT_CHANGETEXT
单击这个菜单项可以对显示的文本所做的修改保存到磁盘文件中
单击它的时候它就是要改变文本
这时候我们给它响应一个COMMAND消息
COMMAND消息里面这里面我们要给它选择
SDI的document
然后这是文档
这是命令消息
然后这里系统缺省的给你OnEditChangetext
然后我们就编辑它
编辑它以后呢
我们这里增加一个代码
这个代码是这样的
是CInputDlg
然后我们定义了一个InputDlg
实际上是创建了一个CInputDlg类的对象
如果选择的是对话框里面
这是CInputDlg
大家知道是我定义的对话框类
实际上是在对话框里面定义了一个对象
然后这个对象实际上指向了这个对话框
然后在对话框里面DoModal==IDOK
那么这个意思是在对话框中选择的“确定”这么一个按钮
然后就获取对话框里面m_input
m_input是对话框里面我定义了一个编辑框
编辑框里面输入的内容
那么给它放到m_str里面
然后更新视图
视图它是要输出的
对于单文档视图类CMySdiView类的OnDraw函数
我们对它进行处理
我们下面要增加一些内容
这个就是定义了客户区类的一个对象
在这里面获取了客户区的一个指针
然后获取当前客户区的sizeClient
然后从中读取数据
那么就是这个pDoc,是指向当前文档的指针
指针里面指向m_str这个对象
从中获取的这个数据放到str里面
然后用选定的字体绘制这个字符串
那么在这个pDC指针指向文档里面
获取这个字符串的相关信息
然后TextOut这时候才输出
所以我们必须把这一段内容添加到OnDraw里面去
它应该是在视图里面进行处理的
前面都是在文档里面进行处理
所以这时候我们是在视图里面进行OnDraw的处理
OnDraw请大家注意
这个地方系统里面总是给它注释掉
这个应该把注释放掉
在这个地方增加刚才介绍的代码
那么这个时候大家注意到
为了在这个文档类中定义CDlgInput对象
还必须在这个MySdiDoc.cpp中加入对话框的头文件
加入这一行
回过头来看一下
那么我们刚才输入的代码
这个地方打了一个红色波浪线
说明这个地方是没有定义
没有定义,实际上它缺了什么东西呢?
它缺的就是一个
DialogueInput类的定义
那这个时候我们再回过头来看
我们刚才在OnEditChangetext里面
刚才这个CDlgInput波浪线已经没了
那么说明什么呢?
由于刚才插入了
这个DlgInput类的定义
在这里面它就认为DlgInput类
它就认为这个类已经定义了
所以这个地方大家需要注意了
然后为了把这些修改能够保存到磁盘文件中
而且需要的时候可以打开所保存的磁盘文件读取
我们还需要重载Serialize函数来完成串行化
重载后的Serialize函数的代码刚才已经给大家介绍过代码的构架
那么它就是引用ar
ar如果保存
我们就用这种方式保存
否则就是读取
我们把这个重载的代码写到Serialize这个函数里面去
这个地方我们就把重载的内容给它重写一下
就把这个构架给它填写成这样就可以了
然后我们开始编译一下
我们开始运行
好程序运行
它出来的是
您好!单文档界面例程
然后我们编辑里面
我们曾经增加过一个菜单项叫“改变显示文本”
弹出这个对话框
输入一段文字
大家看
比如说Hello World
这时候我按“确定”按钮
这时候文档里面就显示成Hello World
说明这个对话框的操作改变了文档的显示
大家就可以看到这里生成了Hello World
-讨论实录
--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
-第三次作业及答题链接