当前位置:文档之家› 简单画图程序-课程设计

简单画图程序-课程设计

简单画图程序-课程设计目录1. 基本功能描述 ............................................................. 1 2. 设计思路 .................................................................1 3. 软件设计 (3)3.1 设计步骤 (3)3.2 界面设计 (6)3.3 关键功能的实现 ...................................................... 7 4. 结论与心得体会 ........................................................... 8 5. 参考文献 ................................................................. 9 6. 思考题 (9)7. 附录 .....................................................................97.1 调试报告 (9)7.2 测试结果 (10)7.3 关键源代码 (1)武汉理工大学《专业课程设计2(面向对象程序设计)》课程设计说明书简单画图程序1. 基本功能描述1) 在菜单处的有相应的菜单项,可以选择绘制的图形形状,如直线、矩形及椭圆,可-5可供选择,还可以选择线色以及填充色,通过弹出的颜色对话框选择以选择线宽,有1需要的颜色,如果不选择线宽、线色以及填充色,则按默认的画笔以及画刷来绘制选择的图形。

2) 选择好图形后,通过鼠标可以绘制出相应的直线,矩形或椭圆,鼠标的按下确定图形的起点,鼠标的拖动则确定了图形的终点,即通过鼠标的拖动来决定图形的大小,鼠标弹起,此图形则绘制完毕。

3) 增添了工具栏,有相应的选择项,可以更方便地实现相应的功能。

2. 设计思路1) 对需要用到的变量进行初始化。

2) 选择相应的图形之后就响应相应的消息处理函数,给shape赋对应的值。

选择不同的线宽,线色与填充色,则改变画笔和画刷的属性。

3) 鼠标的按下响应LButtonDown(),定义起点的坐标,鼠标的拖动响应MouseMove()改变终点的坐标,鼠标的弹起响应LButtonUp(),刷新,得到绘制图形。

4) 选择图形或其它属性,可进行下一次绘制。

开始初始化(即初始化相关变量,如shpae、线色m_nColor、填充色m_fColor、画笔pen、画刷brush、起点opoint、终点epoint等)选择线宽,1武汉理工大学《专业课程设计2(面向对象程序设计)》课程设计说明书Y改变画笔属性NY 选择颜色,, 改变画笔属性 NY 选择填充,改变画笔属性N直线, 矩形, 椭圆,响应直线的消响应矩形的消响应椭圆的消息处理函数息处理函数息处理函数OnRect()OnRect()OnRect()shape=1 shape=2 shape=3鼠标左键按下,响应LButtonDown(),opoint=point鼠标左键按下拖动,响应MouseMove(),epoint=point,响应OnPaint(),绘制图形鼠标左键弹起,响应 LButtonUp(),刷新,得到图形结束2武汉理工大学《专业课程设计2(面向对象程序设计)》课程设计说明书图1 程序流程图3. 软件设计3.1 设计步骤1)创建一个给予单文档的应用程序框架。

命名为“yuyangyi”。

图2 创建工程2)编辑菜单。

添加需要的菜单项,如图3;设定好ID值,如图4;建立类向导,在视图类中,对菜单项添加对应的COMMAND消息出理函数,部分菜单项还添加对应的UPDATE_COMMAND_UI消息函数,如图5。

3武汉理工大学《专业课程设计2(面向对象程序设计)》课程设计说明书图3 添加菜单项图4 设定菜单项ID4武汉理工大学《专业课程设计2(面向对象程序设计)》课程设计说明书图5 建立类向导3)创建工具栏。

在插入处选择资源,新建工具栏,如图6;在工具栏上添加相应的按钮,在属性处更改其ID,如图7。

图6 新建工具栏5武汉理工大学《专业课程设计2(面向对象程序设计)》课程设计说明书图7 编辑工具栏4)在相应消息函数处添加代码,实现其功能。

建立类向导,添加WM_PAINT消息,以及LBUTTONDOWN、LBUTTONUP、MOUSEMOVE消息,并在其中添加相应的代码,如图8。

图8 添加WM_PAINT消息3.2 界面设计表1 界面控件表6武汉理工大学《专业课程设计2(面向对象程序设计)》课程设计说明书控件名称控件类型 ID属性相关变量绘图下拉式菜单直线菜单项 ID_LINE int shape工具栏按钮矩形菜单项 ID_RECT int shape工具栏按钮椭圆菜单项 ID_ELLIPSE int shape工具栏按钮线宽弹出式菜单 int w颜色(线色) 菜单项 ID_COLOR COLORREF m_nColor工具栏按钮填充色菜单项 ID_FILLCOLOR COLORREF m_fColor工具栏按钮3.3 关键功能的实现1)绘制选择的图形。

在直线、矩形以及椭圆的消息处理函数里为shape赋值,选择直线,则shape=1,选择矩形,则shape=2,选择椭圆,则shape=3,在OnPaint()里添加绘图的代码,其中运用3个if语句来绘制不同的图形。

当shape=1时执行绘制直线的代码,同理绘制出矩形与椭圆。

2)通过鼠标绘制图形。

在视图类里添加WM_LBUTTONDOWN、WM_LBUTTONUP以及WM_MOUSEMOVE消息,在OnLButtonDown()函数里,获取鼠标坐标,将其赋给之前定义作为起点的变量opoint;在OnMouseMove()函数里,把鼠标坐标赋给之前定义作为终点的变量epoint,OnPaint()中绘图的代码中的坐标都得到了,进行绘图;在OnLButtonUp()函数里,进行刷新,显示绘制出的图。

3)改变线宽。

定义了默认线宽w=1,在菜单处选择了线宽的值后,对应的值赋给了w,在OnPaint()创建的画笔中,pen.CreatePen(PS_SOLID,w, m_nColor),线宽处用w表示,则改变w的值即改变了画笔的粗细。

4)改变线色。

在选择线色时,会弹出系统带的颜色对话框,把选中的颜色给m_nColor,在OnPaint()创建的画笔中,pen.CreatePen(PS_SOLID,w,m_nColor),线色处用m_nColor表示,则当 m_nColor改变时,画笔的颜色就会跟着发生变化。

5)改变填充色。

选择填充色时,通过颜色对话框选择颜色,选中的颜色赋给m_fColor,在OnPaint()创建的画刷中,brush.CreateSolidBrush(m_fColor),颜色就是用m_fColor表示的,所以m_fColor是什么颜色,画刷就是什么颜色。

7武汉理工大学《专业课程设计2(面向对象程序设计)》课程设计说明书 4. 结论与心得体会这次C++程序设计(简单画图程序的实现)的课程设计至此已基本完成,利用这个程序可以在用户区绘制出直线、矩形与椭圆图形,可以自定义线条的颜色以及选择线的宽度,还可以改变图形的填充色。

最终设计的程序基本能够达到课设任务书指定的基本功能。

这次课程设计让我收获颇多,感觉很是充实,看到最后程序正常运行时候心里还略有一点小小成就感。

在选课题的时候,看到有画图程序这个题目时候,觉得应该有趣一点,不是很枯燥那种,加上平时C++理论课上这种类似的画图程序接触过,老师也讲过类似例子,于是就选择了它。

原本以为这个程序制作起来很简单,但是到了开始着手程序设计时候,发现第一步,也就是画出程序流程图,我就不知什么样子的流程图才是任务要求的,在查阅课本以及相关书籍上类似程序流程图实例后,借鉴了例子中的基本框架,然后才画出符合要求的流程图。

当开始用VC进行程序编制时候,创建完工程、编辑好相应菜单选项以及对菜单项添加对应的COMMAND消息出理函数和对应的UPDATE_COMMAND_UI消息函数后,突然思维卡住了,不知道下一步该从何处下手。

请教了一下同学才发现自己的问题很低级,在添加完函数后得做的就是在相应消息函数处添加代码来实现其功能。

真正的困难从这时候开始出现了,代码是程序核心部分,自然也是也困难的地方了,在参阅了课本和平时上课的课件之后,自己尝试着编写相应功能的代码,可是编写完某个功能后用VC编译时候,程序便报出许多的错误,其中较大的一些问题在和同学讨论及请教之后得到解决,多数的错误还是属于那种低级的小错误,开始体会到平时一些看起来简单自己编懒得亲自敲打代码实践的小程序在真正做起来也是需要认真细心对待的。

在建立完类向导,添加完WM_PAINT消息,以及LBUTTONDOWN、LBUTTONUP、MOUSEMOVE消息,对其进行代码添加时候,最难得部分出现了,自己参照资料所写的代码总是不能运行正确,而且代码不是很精简,冗余度很大,最终参照着从网上找到的一段代码改写自己代码,最后才得到正常精简的程序代码。

在编程中,遇到过很多问题,有时候好不容易解决掉一个问题,还没来得及高兴就发现这个问题的额解决却衍生出了另外的问题,甚至是一连引发好几个小问题,例如在实现动态画图时,发现每次接着画下一个图形时候,上次以及之前画的图案就全部清空了,修改了相应刷新函数之后,图案是能够保存了,可是动态画图的每一个中间过程也都被一起保留下来了,这一点到最后也没有被解决,这是这次课程设计中最遗憾的一个地方,虽然程序能基本满足要求,但是没能完全满足相应要求。

通过这次课程设计,我学习到了很多,让我感受到之前在理论课程安排的上机试验中,所掌握的实际程序操作都是在表层的,没有深入的程序设计的核心以及整体把握,上机时候我们大部分都是参照着课本以及课件来操作的,所以遇到的问题不多也不大。

但这次课程设计是的靠自己来独立操作,需要自己去查阅以及筛选相应的资料来帮助自己完成设计,锻炼我们的独立工作及动手实践能力。

让我对VC 中的MFC有了更多的了解及认知。

8武汉理工大学《专业课程设计2(面向对象程序设计)》课程设计说明书5. 参考文献[1]揣锦华.面向对象程序设计与VC++实践.西安电子科技大学出版社.2005.[2]Walter Savitch. 完美C++教程.清华大学出版社.2005.[3](美) Judy Scholl. C++编程:从问题分析到程序设计实验指导书.电子工业出版社.2003.[4] 夏崇镨, 任海军, 余健. Visual C++课程设计案例精编.清华大学出版社.2008 6. 思考题1) 说明直线、椭圆、矩形绘制使用的函数,及其参数含义,答:直线、椭圆、矩形绘制使用的函数是OnPaint()。

相关主题