首页 理论教育VC++MFC图层软件架构教程:绘图软件开发技巧

VC++MFC图层软件架构教程:绘图软件开发技巧

【摘要】:开发一个可以支持画线、矩形和椭圆形等图形的软件,必须将鼠标按下、释放和拖动等事件联合处理。大型图形软件通用的架构,是用一个抽象类将不同图层代码分类管理。创建一个工程名为“Ly”的SDI程序,演示使用图层软件架构开发绘图软件,如图8-21所示。表8-1 工具栏按钮的属性4)在视图类CLyView的头文件中添加一个成员变量。17)修改CLayer类的源文件Layer.cpp。单击“拖动”工具栏按钮,选中一个绘制好的图层进行拖动。

开发一个可以支持画线、矩形和椭圆形等图形的软件,必须将鼠标按下、释放和拖动等事件联合处理。如果将各种图形绘制以及拖放过程在一个类中编写,则最后这个类的代码将无比庞大而且难以维护。大型图形软件通用架构,是用一个抽象类将不同图层代码分类管理。

创建一个工程名为“Ly”的SDI程序,演示使用图层软件架构开发绘图软件,如图8-21所示。

978-7-111-46378-8-Chapter08-59.jpg

图8-21 创建单文档工程

1)在MFC应用程序向导的每个步骤中都单击“Next”按钮,只有在第5个分页中选择“As a statically linked library”,最后单击“Finish”按钮完成工程创建,如图8-22所示。

978-7-111-46378-8-Chapter08-60.jpg

图8-22 完成工程创建

2)在资源视图中修改ToolBar资源,添加一些工具栏按钮,如图8-23所示。

978-7-111-46378-8-Chapter08-61.jpg

图8-23 编辑主工具栏资源

3)新增工具栏按钮的属性见表8-1。

表8-1 工具栏按钮的属性

978-7-111-46378-8-Chapter08-62.jpg

4)在视图类CLyView的头文件中添加一个成员变量

978-7-111-46378-8-Chapter08-63.jpg

5)在构造函数中初始化

978-7-111-46378-8-Chapter08-64.jpg

6)在视图类中为4个工具栏按钮建立命令和更新消息映射函数(共8个函数),如图8-24所示。

978-7-111-46378-8-Chapter08-65.jpg

图8-24 添加工具栏按钮的消息映射函数

7)修改以上建立的8个工具栏按钮的消息映射函数代码。

978-7-111-46378-8-Chapter08-66.jpg

978-7-111-46378-8-Chapter08-67.jpg

8)编译并运行,测试代码,如图8-25所示。

978-7-111-46378-8-Chapter08-68.jpg

图8-25 查看运行结果

单击新添加的4个工具栏按钮,对应按钮成为选择状态。

9)在类视图中的根节点上单击鼠标右键,在弹出的快捷菜单中,选择“New Class”命令创建一个类,如图8-26所示。

10)类型选择普通类“Generic Class”,输入类名“CLayer”后单击“OK”按钮,如图8-27所示。

978-7-111-46378-8-Chapter08-69.jpg

图8-26 添加新类

978-7-111-46378-8-Chapter08-70.jpg

图8-27 创建普通类

11)在创建好的类头文件“Layer.h”中,添加一些成员变量和纯虚函数。(www.chuimin.cn)

978-7-111-46378-8-Chapter08-71.jpg

12)创建一个CLayer类的派生类CLine,用于线段绘制过程的管理,如图8-28所示。

978-7-111-46378-8-Chapter08-72.jpg

图8-28 添加派生类

13)修改派生类的头文件“Line.h”,添加一些变量并重写基类的纯虚函数。

978-7-111-46378-8-Chapter08-73.jpg

14)修改派生类的源代码文件“Line.cpp”。

978-7-111-46378-8-Chapter08-74.jpg

978-7-111-46378-8-Chapter08-75.jpg

978-7-111-46378-8-Chapter08-76.jpg

15)用同样的方法再创建一个CLayer类的派生类CEllip,并修改头文件Ellip.h。

978-7-111-46378-8-Chapter08-77.jpg

16)修改派生类的源文件Ellip.cpp。

978-7-111-46378-8-Chapter08-78.jpg

978-7-111-46378-8-Chapter08-79.jpg

978-7-111-46378-8-Chapter08-80.jpg

17)修改CLayer类的源文件Layer.cpp。

978-7-111-46378-8-Chapter08-81.jpg

18)在视图类CLyView中再添加一些成员变量。

978-7-111-46378-8-Chapter08-82.jpg

19)修改CLyView类中OnDraw函数的代码。

978-7-111-46378-8-Chapter08-83.jpg

20)添加CLyView类的WM_LBUTTONDOWN消息映射函数。

978-7-111-46378-8-Chapter08-84.jpg

21)添加CLyView类的WM_LBUTTONUP消息映射函数。

978-7-111-46378-8-Chapter08-85.jpg

978-7-111-46378-8-Chapter08-86.jpg

22)添加CLyView类的WM_MOUSEMOVE消息映射函数。

978-7-111-46378-8-Chapter08-87.jpg

23)编译并运行,测试代码,如图8-29所示。

单击“线段”或“椭圆”工具栏按钮,再单击屏幕拖动鼠标进行图形绘制。单击“拖动”工具栏按钮,选中一个绘制好的图层进行拖动。

978-7-111-46378-8-Chapter08-88.jpg

图8-29 查看运行结果