MFC实验六 文档视图和单文档界面
![MFC实验六 文档视图和单文档界面](https://img.360docs.net/img43/020zsh8g3lu2dltpp47g-31.webp)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验六文档/视图和单文档界面
1.创建一个单文档界面应用程序,项目名设置为wx03.
2.在文档类CWx03Doc中添加数据成员用于保存应用程序的数据。
二维数组m_clrGrid用于保存每个方格的颜色,数据成员m_clrCurrentColor用于保存方格被单击时赋给方格的颜色。
3.在文档类CWx03Doc的OnNewDocument函数中对数据成员进行初始化:
4.向类wx03Doc添加三个成员函数,如下:
函数定义如下:
GetCurrentColor、GetSquare和SetSquare作为文档和视图之间的桥梁,视图对象通过它们可以访问文档的保护成员。
5.编辑CWx03View的OnDraw函数,在视图窗口中绘制网格,并根据文档类中保存的方格
颜色来设置方格的颜色。
6.在视图类CWx03View中添加消息处理函数WM_LBUTTONDOWN的处理函数:
7.利用菜单编辑器编辑个添加如下菜单,各菜单的属性设置如下表:
8.
9.为添加的菜单项添加命令消息处理函数和用户界面更新命令处理函数。由于这些函数都
是针对文档数据的操作,因此将这些菜单命令的消息处理函数添加在文档类中。
10.编译、链接和运行程序,结果如下:
11.添加序列化功能,将各个方格的颜色以及当前颜色存入文件,并允许从文件中读取。
12.编写一个SDI程序,可以用鼠标在视图窗口中划线,并能将所画的线条保存。
13.定义一个新类Cline。
14.编辑类Cline,在其中添加相应的数据成员和成员函数。
15.在文档类中添加保存线段的数组。在头文件wx03Doc.h中添加如下的数据成员和成员函
数,并包含定义类Cline的头文件和使用MFC模板类时需要的头文件:
在文档类的实现文件中编写添加的成员函数:
16.当在视图窗口中按下鼠标右键时开始画线,鼠标右键抬起时完成线段的绘制,在鼠标移
动的过程中画橡皮筋线。因此需要记录划线的起点和终点并设置画橡皮筋线的跟踪标志。
画橡皮筋线时,需要将原来的线条删除,重新画一条从起点到当前鼠标指针坐标的线条,最简单的办法是使用R2_NOT绘图模式反转线条。
在视图类CWx03View中添加如下的数据成员和成员函数:
在视图类CWx03View的实现文件中编写函数InvertLine:
视图类中添加鼠标消息WM_RBUTTONDOWN、WM_MOUSEMOVE和WM_RBUTTONUP
的处理函数并添加如下代码:
17.为了在改变窗口大小或最小化后重新打开窗口,或在被覆盖后重新显示时保留原有的图
形,必须在OnDraw函数中重新绘制文档中线段数组中的线段。
18.在定义类Cline时实现了类的序列化,但只是一条线段的序列化,还必须保存文档类的
数据。编写文档类wx03Doc的Serialize函数,完成对线段数组的序列化。
19.在文档类中重载DeleteContents函数:
20.编译、链接和运行程序,用鼠标在视图窗口中画线并测试保存、新建、打开等命令,运
行结果如图所示:
21.为wx03增加滚动视图功能。
执行Edit->Replace菜单命令,将视图类CWx03View头文件中所有Cview替换成CScrollView,同样将实现文件中的所有Cview替换成CScrollView。
22.在视图类CWx03View中重载虚函数OnInitialUpdate,编辑该函数。
23.修改鼠标消息处理函数,进行设备坐标与逻辑坐标之间的转换。在文档类中保存的线段
坐标是逻辑坐标,当窗口改变大小或滚动后,调用OnDraw重绘的线段使用的是逻辑坐标。
24.在视图中画椭圆。
在视图类wx03View中增加两个数据成员,分别保存椭圆的外接矩形和颜色,同时在构造函数中进行初始化。
25.编辑视图类的OnDraw函数,绘制椭圆:
26.在视图类中添加WM_LBUTTONDBLCLK消息处理函数,当在椭圆内双击时,改变椭圆
的颜色:
27.编译、链接和运行程序如下: