资源预览内容
第1页 / 共13页
第2页 / 共13页
第3页 / 共13页
第4页 / 共13页
第5页 / 共13页
第6页 / 共13页
第7页 / 共13页
第8页 / 共13页
第9页 / 共13页
第10页 / 共13页
亲,该文档总共13页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
青岛理工大学琴岛学院设 计 报 告课题名称:画图板学 院:青岛理工大学琴岛学院专业班级:计算机网络技术101班学 号:20100312010学 生:李经纬指导教师:张秀国青岛理工大学琴岛学院教务处2011年 12 月 30 日学 生李经纬指导教师张秀国课题名称绘图板设计时间2011/12/19至2011/12/30设计地点8#209设计目的1、熟悉用vc编写应用程序的基本方法。2、体会windows编程的消息处理机制。3、强化对C+语言的理解和应用。4、增加对C+和Mfc的认识,锻炼自己的动手能力、查询资料的能力和独立思考的能力指导教师评语系部教研室意 见一、需求分析1.选题:程序的原型最先是老师在上课时演示的,老师指导我们做画图只能实现单一的画线功能,只可以画出直线或者图形,每次只能画出当前图形之前画出的图形不再显示,而且上课的时候只能实现几个颜色的画图,无法实现填充画图以及自由选择颜色。经过查阅资料,手动添加了一些代码和函数实现了这些功能。2.界面:(1) 程序打开界面如下图1所示:图1 打开界面(2)程序打开界面如下图2所示:图2 设置界面3.功能划分: 本画图板可以实现的功能主要有画点,画直线,画圆,画矩形,任意直线,设置直线颜色,设置填充颜色还有线条类型。(1)画图菜单子菜单中可以选择画图形的方式,可以画出的图形有点、直线、矩形,椭圆、以及任意直线。(2)选择画点功能可以在任意位置画出一个点,默认像素为1,颜色为黑色。(3)选择画矩形可以画出一个由默认白色填充的矩形,关于填充色可以在颜色中进行选择自定义颜色。(4)椭圆也可以实现和矩形相同的功能。(5)可以选择画曲线。(6)颜色菜单下可以选择图形颜色以及填充色。(7)点击帮助可显示版本信息以及作者。(8)设置菜单中有线段粗细和类型的选择及预览程序运行实现效果如下图3所示:图3.运行实现界面图4.版权信息4. 用到的类表格、每个类中用到的函数及添加的命令响应表格、各资源对应的ID号表格:表1 用到的类类名描述说明CShape图元基类CDC指针Cline线段类,定义线宽,颜色以及绘制点Crectangle矩形图元类,绘制矩形CEllipse椭圆类,绘制椭圆CDot点类,绘制一个点CMyDrawDoc文档类,实现图元容器的定义和操作CMainFrame框架类CMyDrawView视图类,添加画图函数,设置鼠标移动等功能表 表2 CMyDrawView类用到的函数及命令响应添加的函数和变量描述说明OnDot用来设定画点OnRectangle用来设定矩形OnLine用来设定直线OnAutoline用来设定任意直线OnEllipse用来设定椭圆OnLbuttonDown鼠标左键按下消息响应函数OnLButtonUp左键抬起时消息响应函数OnMouseMove鼠标移动相应函数OnDraw绘制图形函数,设定怎样画出图形BOOL m_bDraw;绘制图形变量CPoint m_ptOrigin;起始点CPoint m_ptEnd;结束点UINT m_nDrawType绘制图形形状COLORREF m_clrFill填充色COLORREFm_clrShape边框颜色int m_nLineStyle线条的样式UINT m_nLineWidth线条的宽度CAutoLine *autoline自由画线CMyDrawDoc* GetDocument()设置文档对象指针表3 在CMainFrame类中用到的函数及添加的命令响应添加函数和命令响应描述说明m_wndStatusBar初始化框架类m_wndToolBa加载工具栏 表4.各个菜单项对应的ID号ID号描述说明IDM_DOT画点IDM_LINE直线IDM_RECTANGLE矩形IDM_ELLIPSE椭圆IDM_AUTOLINE自定义画线IDM_CLRSHAPE图形颜色IDM_CLRFILL填充颜色ID_APP_ABOUT帮助版权信息二、详细设计1.直线图元类的实现在头文件中添加如下代码,定义函数以及参数在CLine类下添加消息处理函数CShape(),添加代码:class CLine :public CShape CLine(COLORREF m_clrShape,CPoint m_ptOrigin,CPoint m_ptEnd,UINT m_nLineWidth,int m_nLineStyle); void Serialize(CArchive &archive);void Draw(CDC *pDC); public:COLORREF m_clrShape; CPoint m_ptOrigin,m_ptEnd;UINT m_nLineWidth;int m_nLineStyle;这样就实现了画直线的功能,其中CLine()表示绘制纯虚函数,参数为设备指针。Serialize函数是为了实现CArray,CList和CMap调用这个函数以串行化元素。缺省的实现进行按位读写,Draw(CDC *pDC)作用是格式化为字符串COLOREF是为了描绘一个RGB颜色,Cpoint定义了一个位置点,UINT m_nLineWidth定义线宽,m_nLineStyle定义线形。在.cpp文件中实现的代码如下CLine:CLine(COLORREF m_clrShape,CPoint m_ptOrigin,CPoint m_ptEnd,UINT m_nLineWidth,int m_nLineStyle)this-m_clrShape=m_clrShape;this-m_ptOrigin=m_ptOrigin;this-m_ptEnd=m_ptEnd;this-m_nLineWidth=m_nLineWidth;this-m_nLineStyle=m_nLineStyle;void CLine:Serialize(CArchive &ar) if(ar.IsStoring()arm_clrShapem_ptOriginm_ptEndm_nLineWidthm_clrShapem_ptOriginm_ptEndm_nLineWidthm_nLineStyle; void CLine:Draw(CDC *pDC) CPen pen(m_nLineStyle,m_nLineWidth,m_clrShape);CPen *penOld=pDC-SelectObject(&pen); pDC-MoveTo(m_ptOrigin); pDC-LineTo(m_ptEnd); pDC-SelectObject(penOld); CLine:Cline()为调用友元函数利用指针分别指向颜色,形状,点大小等,void CLine:Serialize()表示从CLine类中读取信息,if(ar.IsStoring()表示判断是保存文件还是读取文件,” ar”分别表示读取内容和写入内容。void CLine:Draw(CDC *pDC) 声明一个画笔对象,利用线型、线宽、颜色参数,CPen *penOld=pDC-SelectObject(&pen)表示选择画笔,返恢复来画笔对象指针,pDC-MoveTo(m_ptOrigin)表示画笔起点,pDC-LineTo(m_ptEnd)表示画线到终点,pDC-SelectObject(penOld)表示恢复原来画笔对象。2.椭圆图元类的实现class CEllipse :public CShapeCOLORREF m_clrShape;COLORREF m_clrFill;CPoint m_ptOrigin;CPoint m_ptEnd;该函数省略的部分为和直线类相同的部分,在此不做赘述。COLORREF m_clrShape是选择绘制图形边框的颜色,COLORREF m_clrFill是绘制图形填充颜色,CPoint m_ptOrigin绘制起始点,CPoint m_ptEnd绘制结束点,点图元类,矩形图元类的功能实现和椭圆以及直线类类似,在此不做赘述,.cpp文件实现与直线类代码大同小异,在此也不一一列举了。3.任意直线图元类的实现相比起直线类以及其他两个类的不同之处在于lass CAutoLine :public CShapepublic:COLORREF m_clrShape;UINT m_nLineWidth;int m_nLineStyle;CArray m_ptArray;DECLARE_SERIAL(CAutoLine);CArray m_ptArray定义了模板类CArray的一个实例ptArray,它的元素是CPoint对象DECLARE_SERIAL(CAutoLine)为一个可以串行化的CObject派生类产生必要的C+标题代码。串行化是把某个对象的内容从一个文件读出和写入一文件。在.H文件中使用DECLARE_SERIAL宏,接着在需要访问此类对象的全部.CPP文件中包含此文件。如果DECLARE_SERIAL包含在类定义中,那么IMPLEMENT_SERIAL必须包含在类工具中。DECLARE_SERIAL宏包含全部DECLARE_DYNAMIC,IMPLEMENT_DYCREATE的功能4.绘图类的实现这个类非常重要,要实现所绘图形的显示靠此函数。void CMyDrawView:OnDraw(CDC* pDC)CMyDrawDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);int nCount=pDoc-m_obArray.GetSize();for(int i=0;im_obArray.GetAt(i)-Draw(pDC);CMyDrawDoc* pDoc = GetDocument()对文档头指针的传递,得到文档对象的指针nCount=pDoc-m_obArray.GetSize()是为了获得到容器内的图元数目. (CShape*)pDoc-m_obArr
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号