c++课程设计(简易绘图程序)

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

0目录1、需求与功能分析.........................................................................................................................12、系统总体框架.............................................................................................................................23、模块设计与分析.........................................................................................................................33.1画图模块.............................................................................................................................33.2贴图模块.............................................................................................................................33.3窗口模块.............................................................................................................................43.4菜单模块.............................................................................................................................43.5工具栏与状态栏模块.........................................................................................................44、类的设计与分析.........................................................................................................................44.1、CAboutDlg类..................................................................................................................44.2、CChildFrame类...............................................................................................................44.3、CDib类............................................................................................................................44.4、CDrawingDoc类.............................................................................................................54.5、CDrawingView类............................................................................................................64.6、CMainFrame类...............................................................................................................74.7、CSettingDlg类.................................................................................................................75、特色算法分析.............................................................................................................................85.1CDib类中的显示bmp位图..............................................................................................85.2CDrawingView类中的画图部分.....................................................................................106、功能测试...................................................................................................................................137、存在的不足与对策...................................................................................................................168、程序源代码...............................................................................................................................179、使用手册...................................................................................................................................1710、参考文献.................................................................................................................................2011、需求与功能分析为了检验一个学期以来自己学习c++这门课程能够学到多少知识,加上原来就对图像处理就比较感兴趣,曾经更有想过要做一个可以合成红蓝3D图片的一款软件,就是那种需要带上红蓝眼镜才可以看到3D效果的那种图片,自己也有用photoshop做过这样的图片,但是photoshop需要调很多东西才能合成这样的图片,而且还要用相机送两个不同的角度拍两张照片作为源图片去合成红蓝3D图片,虽然我知道原理并不难,但是当我选择了”简易绘图程序”这个课程设计的题目之后,才发现每实现一个功能都需要花很多的精力,而且实现那些功能之后还会发现各种各校的bug,需要细心去寻找解决的办法。如今课程设计也要上交,一样还有很多我想实现的功能都还没实现,最终也没有实现我想要实现的功能---合成红蓝3D图片。只做了一些简单的绘图功能。功能分析,目前这个软件的主要功能有如下:1、画直线:通过OnLine()函数实现。2、画矩形:通过OnRectangle()函数实现。3、画椭圆:通过OnEllipse()函数实现。4、铅笔工具:可以画任意线条。通过OnPencil()函数实现。5、橡皮擦:可以擦除所画的线条。该功能还没实现。6、右键弹出菜单:可以在客户中点击鼠标右键,快速选择常用菜单。通过OnContextMenu函数实现。7、状态栏显示鼠标移动的坐标:在程序的右下角显示,通过OnUpdateX(CCmdUI*pCmdUI)和OnUpdateY(CCmdUI*pCmdUI)这两个函数实现。8、画图颜色选择:可以画任何颜色的线条,通过OnEditColor()函数实现。9、读取bmp位图:可以在电脑中选择一个bmp位图,在程序中显示出来,通过新建一个Cdib类来读取bmp文件信息再view类和Doc类调用来显示该位图。10、保存为bmp位图:可以将在程序所画的图形保存为一幅bmp图片,通过view中的SaveAsBmp(CStringfilename)实现。11、线条类型及线宽的设置:可以将画出的线条设置成实线、虚线、点线,还可2以设置线条的粗细,通过示例这一功能可以立刻显示所选择线条的粗细及线型。通过新建CSettingDlg类,再在view类中调用OnSetting()函数实现画笔的对话框,CSettingDlg类中的OnPaint()函数是实现示例功能的。12、窗口的重绘时不擦除原来的内容:可以在窗口发生变化时,窗口的内容不消失,程序在窗口尺寸发生变化时,将会发送WM_PAINT消息,这时首先会擦除窗口背景,然后进行重绘操作,这样就把窗口中先前绘制的内容擦除了。我是使用双缓冲来解决这个问题的,双缓冲设计思路:如果只是为了让窗口闪烁不那么厉害,避免背景色的填充是最直接的办法。但是那样的话,窗体上会变的一团糟。因为每次绘制图象的时候都没有将原来的图象清除,造成了图象的残留,于是窗体重绘时,画面往往会变的乱七八糟。所以单纯的禁止背景重绘是不够的。我们还要进行重新绘图,但要求速度很快,于是想到了使用BitBlt函数。它可以支持图形块的复制,速度很快。我们可以先在内存中作图,然后用此函数将做好的图复制到前台,同时禁止背景刷新,这样就消除了闪烁。以上就是双缓冲绘图的基本的思路。一部分代码写在了OnLButtonUp(UINTnFlags,CPointpoint)函数里面,也有一部分打码写在了OnDraw(CDC*pDC)函数里面。2、系统总体框架图1总体框架简单绘图工具画直线画矩形画椭圆铅笔工具读取位图保存位图颜色及线型设置33、模块设计与分析3.1画图模块:该模块的大部份功能都写在了view类里面,这样造成了后期的修改造成了一定的影响,对于排错,修复bug增加了难度,对于初次使用mfc做一个相对大一点的程序,在函数分配,类的建立都有很多不足的地方。该模块也是此次程序的重点模块之一,主要负责画一些简单图形,例如:直线、矩形、椭圆、任意曲线(铅笔)等等;有线型、线宽的设置;还有画笔颜色的选择,可以画各种各样颜色的线条。该模块的设计思路是:简易画图工具——线型、线宽设置——颜色选择。3.2贴图模块:该模块是为了读取bmp位图设计的,主要代码写在CDib类里面,再通过view类和Doc类去调用显示位图,这个模块同样是此次程序的重点模块之一,也是花费时间最多的一个模块,开始的时候,我使用了读取程序里面的位图资源,但是这样的办法虽然能够成功显示出位图,但是却十分麻烦,就是要先把想要显示的位图放到程序的位图资源里面,然后再通过LoadBitmap函数

1 / 21
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功