当前课程知识点:VC++面向对象与可视化程序设计(下):MFC编程基础 >  第9章 单文档与多文档 >  9-5 MDI编程实例 >  9-5-2

返回《VC++面向对象与可视化程序设计(下):MFC编程基础》慕课在线视频课程列表

9-5-2在线视频

9-5-2

下一节:html

返回《VC++面向对象与可视化程序设计(下):MFC编程基础》慕课在线视频列表

9-5-2课程教案、知识点、字幕

下面我们要添加菜单处理的函数

我们可以在CMyMdiDoc2这个类中加入消息响应成员函数

那么这个我们自己来添加

这个类的定义中我们可以增加这么一个函数

当然你也可以在类的定义中添加函数的办法

在这里添加相应的函数

比如函数名 函数的参数

函数的参数就是UINT nID

那么函数名的话就是OnChangeDrawType

返回类型就是这个void

这个参数类型就是Uint

那么也可以给大家演示一下

你们做的时候返回值可以选void

函数名的话,可以是OnChangeDrawType

那么参数的名字叫做nID

参数的类型是Uint

那么这个就要添加

好,只要添加就过来了

然后我们就添加了这个

然后添加完 我们就要进行消息映射

我们就要在这个MyMdiDoc2.cpp的

消息映射部分添加选择图形类型的消息映射

添加消息映射我们选择的是COMMAND_RANGE

然后ID的话呢,第一个ID是直线

第二个是椭圆 第三个是矩形

所以第一个ID跟最后一个ID,绑定的它的消息处理函数是OnChangeDrawType

我们自己添加这一行在这个消息映射的区域

我们在消息映射的区域

我们已经添加好了这个这句

第一个是画线 第二个是画矩形

然后绑定的是消息处理函数

那么我们就要编写这个消息处理函数

这个里面 我们刚才定义了一个m_drawType就是绘画类型

nID减去第一个参数ID_LINE等于ID的索引值

如果减出来的是0,那么第一个就是画线

如果减出来是1那么画得就是椭圆

如果2的话呢 就是矩形

我们要进行串行化处理

为了把对视图中显示文本的修改保存到磁盘文件中

并在需要时可以打开所保存的磁盘文件读取文档

我们必须要重载CMyMdiDoc2类的Serialize()

串行化函数来完成串行化

串行化代码也是这样

这跟前面讲的串行化处理一样

如果存储

我们就获取它的值,然后储存起来

如果存储过程中我们要把图形存储起来的话

我们就要看这个值

确定它的x坐标和y坐标

一定是从左上角到右下角

因为我们画线的时候

可以从任意方向画线

所以这个例子跟我们前面讲过的一个例子类似

就是要确定它的坐标方位

么如果是加载代码

我们就是把内容的话呢 全部先清空

我们在这里定义了一个DrawData的指针

然后在这指针里面,我们把所有x\y的数据取出来

然后的话将文档中的数据读入到data的内存中去

然后加入到集合类中

最后一更新,全部就画出来了

后面我们要考虑一个视图的输出

在视图CMyMdiView2这个类中

我们要定义一个DrawData类型的变量 m_DrawData

这个变量要用于保存当前要绘图的信息

画完后把这信息保存

同时的话我们还要在这个view里面

因为视图是在绘图中绘图

但是我们牵扯到画图的数据和我们的文档

所以要在视图里面加上这两个头文件

才能够使用它们这个类

这是一个

第二个在为视图CMyMdiView2里面我们要增加

鼠标单击左键这么一个消息

和鼠标左键的按下和抬起两个消息

实际上这两个消息是为了画图用的

当按下鼠标时

定义一个DrawData类的对象

用这个类的成员begin记录按下鼠标时的坐标

用end记录松开鼠标时的坐标

那么我们可以根据文档类中图形的类型

决定在客户区画什么样的图形

所以这里面就牵扯一个视图的输出问题

然后我们在视图里面响应鼠标消息

我们是这么完成的

在这个view里面

类向导里面的消息

然后响应的鼠标左键按下和鼠标左键抬起的消息

好了 那么这两个消息都响应完了

我们就可以看一下

当鼠标按下左键的时候

我们做的事情是什么

我们这里定义了一个第二个文档的指针

然后获取文档的GetDocument()第二个文档的内容

然后我们又定义了一个这个DrawData这个对象

获取它的起始位置

当然了 我们为了在视图2里面能够使用

因为我们是GetDocument()是获取文档

那么在视图view里面响应的鼠标

那么我们坐标是在文档里面获取

所以我们还要加入这个文档的头文件

否则的话,CMyMdiDoc2对象是没法定义的

那么我们获得鼠标左键消息之后

我们(处理)是鼠标右键

右键是抬起

抬起的话仍然在第二个视图

就是view2里面

获取定义一个指向第二个文档的指针

然后获取的是结束位置的坐标

那么也就是说到这里为止

我们已经获取了画图的起始位置的坐标和结束位置的坐标

然后有了这个坐标之后

我们定义一个客户区的DC类的对象

CClientDC对象

用这个对象的成员就可以画图

那么在画图过程中我们仍然要创建一个空的画刷

CBrush的对象

因为什么呢

建立一个空画刷 绘图时就不会覆盖下面的图形

所以我们的画刷用的是HOLLOW_BRUSH

然后把这个画刷BRUSH选入当前的设备环境DC

然后根据起始坐标和终点坐标确定用户区

一个矩形用户区

然后的话呢 我们再根据这个获得的值

它的值如果是0 就把笔移到起始位置

MoveTo起始位置 LineTo结束位置

那么画的就是一条线

如果是1的话呢

实际上是矩形

因为我们已经知道矩形区的坐标

所以我们在矩形区里画内切椭圆

那么如果矩形的话呢

我们在矩形区里就可以唯一的画一个矩形

那这样就可以画图

画出来后呢

我们就将保存图形的信息m_drawData保存到文档类的成员当中去

然后画完之后

就可以DeleteObject 这个画刷就可以删除了

删除之后刷新用户区

m_drawData是不执行,报错的

那么只要在前面增加这个DrawData.h就可以了

我们还要在视图的OnDraw函数中添加刷新的代码

OnDraw函数中只需将文档类的成员m_drawData

这个集合的成员在客户区中绘制一遍就可以了

那么这个函数的代码是这样的

OnDraw 获取文档内容

这里面大家注意

原来代码里面写了一块儿别的内容

大家可以把它去掉

因为我们获得的是第二个文档的内容

所以把它改成第二个文档的内容

然后的话在这里面进行虚画刷的刷新

这样就重新绘制了

在绘制过程中我们通过一个循环来确定我们获取的是哪一项

把它的项数放到绘制数据的对象里面去

在这个时候我们已经获取了矩形区域的坐标

根据这个坐标进行图形类型的绘制

那么这时候drawData它的type如果是0 就画线

如果是1就画椭圆

如果是2就画矩形

那么这样的话呢

我们就完成了第二个多文档的操作

测试一下

好了 我们如果说新建一个第二个文档

我们确定

确定完了我们可以选择图形

如果话直线的话我们就画出来一个直线

如果画椭圆的话就可以画一个椭圆

如果画矩形的话就可以画一个矩形

VC++面向对象与可视化程序设计(下):MFC编程基础课程列表:

第0章 课前讨论

-讨论实录

--0-0

第6章 MFC基础知识

-6-1 MFC概述

--6-1 MFC基础知识

-6-2 C++的基本知识

--6-2-1 类

--6-2-2 对象

--6-2-3 类的方法

--6-2-4 内联函数

--6-2-5 构造函数和析构函数

--6-2-6 重载

--6-2-7 友元函数

--6-2-8 友元类

--6-2-9 指针

--6-2-10 类的继承

--6-2-11 多态性和虚拟函数

-6-3 MFC类的组织结构及主要的类的简介

--6-3-1 MFC类的组织结构

--6-3-2 根类

--6-3-3 应用程序结构类

--6-3-4 可视对象类

--6-3-5 通用类

--6-3-6 OLE类

--6-3-7 ODBC数据库

-6-4 MFC中全局函数和全局变量

--6-4 MFC中全局函数和全局变量

第7章 Windows标准控件在可视化编程中的应用

-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章 在MFC中创建应用程序的资源

-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章 单文档与多文档

-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章 多媒体应用程序的设计

-10-1 利用音频函数实现多媒体程序设计

--10-1-1

--10-1-2

--10-1-3

--10-1-4

-10-2 利用Windows Media Player控件实现多媒体程序设计

--10-2

-课堂示例源代码

--html

第11章

-例11-1

--例1

-例11-2

--例11-2

-例11-3

--例11-3

-例11-4

--例11-4

-11-1 ODBC介绍与引用

--11-1

-课堂示例源代码

--html

第三次作业及答题链接

-第三次作业及答题链接

9-5-2笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。