VC课程设计说明书.docx

上传人:b****5 文档编号:4701799 上传时间:2022-12-07 格式:DOCX 页数:42 大小:77.92KB
下载 相关 举报
VC课程设计说明书.docx_第1页
第1页 / 共42页
VC课程设计说明书.docx_第2页
第2页 / 共42页
VC课程设计说明书.docx_第3页
第3页 / 共42页
VC课程设计说明书.docx_第4页
第4页 / 共42页
VC课程设计说明书.docx_第5页
第5页 / 共42页
点击查看更多>>
下载资源
资源描述

VC课程设计说明书.docx

《VC课程设计说明书.docx》由会员分享,可在线阅读,更多相关《VC课程设计说明书.docx(42页珍藏版)》请在冰豆网上搜索。

VC课程设计说明书.docx

VC课程设计说明书

 

唐山学院

VC程序设计课程设计

 

题目绘图应用程序的设计和实现

系(部)计算机科学与技术系

班级06计算机科学与技术1班

姓名任招静

学号2060206124

指导教师郭琳虹

2009年06月29日至07月03日共1周

 

2009年7月3日

VC程序设计课程设计任务书

一、设计题目、内容及要求

1、设计题目:

绘图应用程序的设计与实现

2、设计内容及要求:

利用MFC应用程序、图形处理的基本知识,设计一个绘图应用程序,具有以下功能:

①图形绘制功能:

直线、椭圆、矩形、文本(必须实现的功能)②图形修改功能:

线条颜色、线条类型、填充方式的设置(必须实现的功能)③数据保存功能:

能够把图形数据保存到文件中(选做功能)

具有删除、剪切、撤销等编辑功能(选做功能)。

二、要求的设计成果(课程设计说明书、设计实物、图纸等)

1、用VisualC++进行编码,实现应用程序的功能。

注重编码质量,代码要有适当的注释;

2、撰写课程设计说明书一份,不少于2000字。

课程设计说明书应包括封面、任务书、正文(设计的基本思路、设计的步骤及主要代码解释)、参考文献(资料)、附录等内容。

三、进程安排

6月29日:

完成需求分析,确定程序功能,确立程序设计思想

6月30日~7月1日:

进行详细设计,实现编码

7月2日:

进行程序测试,完善编码;撰写设计说明书,准备答辩

7月3日:

答辩

四、主要参考资料

[1]王育坚.VisualC++面向对象编程教程.第2版.北京:

清华大学出版社,2008

[2]侯俊杰.深入浅出MFC.第2版.广东:

南方出版社,2007

指导教师(签名):

教研室主任(签名):

注:

可以附页

 

课程设计成绩评定表

出勤

情况

出勤天数

缺勤天数

出勤情况及设计过程表现(20分)

课设答辩(20分)

设计成果(60分)

总成绩(100分)

提问

(答辩)

问题

情况

 

 

指导教师签名:

年月日

1总体设计

1.1程序设计思想

根据绘图板的构造及用户的需求,首先要具有最基本的画图工具栏,其中具有曲线、直线、矩形、椭圆等基本图形按钮及文字按钮,当按下不同按钮时,需要完成不同图形的绘制,这就要添加WM_LBUTTONDOWN、WM_LBUTTONUP、WM_MOUSEMOVE的消息处理函数,并填写相应语句以实现图形及文本绘制。

若想设置所绘图形的颜色、线宽及样式,需要设置不同的画笔和画刷,设置颜色可以通过调用颜色通用对话框返回颜色值,而字体的设置也可通过调用字体通用对话框返回字体值。

其次,当改变窗口大小时,所绘内容将要消失,这时就需要对所绘图形及文字进行重绘。

然后,要想实现所绘图形的保存,就需要对各个图形及字体进行序列化。

最后,可以加一些附加设置,增加画笔、画刷、橡皮按钮,创建颜色工具栏,在状态栏显示鼠标坐标。

1.2程序流程图

打开程序,绘制图形文本,可以设置格式,如保存则执行序列化,关闭,重新打开时可将保存图形打开。

打开

是否打开保存图形

显示保存图形

设置图形文本格式

图形文本绘制

是否保存

序列化

关闭

 

图1程序流程图

1.3程序模块图

绘图应用程序包括四个主要模块:

绘制图形文字模块、设置图形文字格式模块、重绘模块、图形文字序列化模块。

图2程序模块图

1.4程序设计步骤

1.在工具栏添加按钮,添加绘制手划线、直线、矩形、椭圆、字体代码

2.在资源视图中,增加设置菜单及风格对话框,利用菜单命令分别调用颜色、风格、字体对话框,实现图形及文字的格式设置

3.新建手划线、直线、矩形、椭圆、文字的一般类,添加代码实现图形及文字的绘制

4.对手划线、直线、矩形、椭圆、文字进行序列化,以实现图形及文字的保存及打开

5.在资源视图中,绘制不同光标,为图形工具栏填加画笔、画刷、橡皮按钮,在代码中设置光标,并完成绘制功能

6.创建颜色工具栏,实现快捷设置颜色,并设置图形工具栏及颜色工具栏位置属性

7.添加状态栏,显示鼠标坐标

1.5程序功能介绍

1.绘制直线、手划线、矩形、椭圆、文字

2.具有画笔、画刷及橡皮功能

3.设置画笔颜色

4.设置各种图形的风格样式(包括线条风格及填充样式)

5.设置字体

6.重绘功能(改变窗口大小时重新绘制)

7.保存并打开所绘图形

 

2详细设计

2.1类型设置

在绘制图形及字体之前,要对绘制哪个图形设置标记,定义整型shape变量,为0时,表示绘制手划线,为1时表示绘制直线,2表示绘制矩形,3表示绘制椭圆,4表示绘制文字,5表示使用画笔,6表示使用画刷,7表示使用橡皮。

2.2图形的绘制

2.2.1绘制手划线

Shape为0时绘制手划线,首先为视图类CMyDrawView添加成员变量。

线段起始坐标定义为CPoint类型,鼠标拖拽标记定义为bool型,绘制时采用标准的十字光标,定义一个HCURSOR型成员变量,在视图类CMyDrawView的头文件中增添必要的成员变量的定义。

在视图类CMyDrawView的构造函数中初始化拖拽标记,设置十字光标。

利用类向导为视图类添加按下鼠标左键WM_LBUTTONDOWN、移动鼠标WN_MOUSEMOVE和释放鼠标左键WM_LBUTTONUP的消息处理函数。

系统中任一时刻只有当前窗口才能捕获鼠标。

在OnLButtonDown()函数中通过调用CWnd类的成员函数SetCapture()捕获鼠标,由于在客户区捕获鼠标后在非客户区就不能使用鼠标了,因此使用鼠标画图结束后应该调用函数ReleaseCapture()释放鼠标。

在应用程序的初始化成员函数InitInstance()中调用SetWindowText()函数设置窗口标题为简易画图板。

2.2.2绘制直线

Shape为1时绘制直线,跟绘制手划线类似,在视图类OnMouseMove()函数中调用SetROP2(R2_NOTCOPYPEN)设置虚画笔,并没有真正绘制,而在视图类OnLButtonUp()函数中才真正调用MoveTo()、LineTo()函数完成起点到当前点的绘制。

2.2.3绘制矩形

Shape为2时绘制直线,跟绘制直线类似,同样在视图类OnMouseMove()函数中调用SetROP2(R2_NOTCOPYPEN)设置虚画笔,而在视图类OnLButtonUp()函数中才真正调用Rectangle()函数完成起点到当前点的绘制。

2.2.4绘制椭圆

Shape为3时绘制直线,跟绘制直线类似,同样在视图类OnMouseMove()函数中调用SetROP2(R2_NOTCOPYPEN)设置虚画笔,而在视图类OnLButtonUp()函数中才真正调用Ellipse()函数完成起点到当前点的绘制。

2.2.5绘制文字

Shape为3时绘制文字,首先在资源视图中新建对话框,仅有一个编辑框,新建对话框类CText,通过类向导设置关联变量m_text(CString类型)。

在视图类OnLButtonDown()函数中调用对话框,获取输入的字符串,通过调用TextOut()函数在鼠标按下位置point绘制字符串。

2.3图形及字体风格设置

2.3.1获得画笔颜色

首先在菜单栏添加颜色选项,通过类向导为颜色添加COMMOND消息处理函数,在函数中通过调用颜色通用对话框获得颜色的值,并将颜色值赋给CMyDrawView类的成员变量m_color,m_color为画笔颜色变量。

在绘制直线、手划线、矩形、椭圆时,将画笔颜色设置为m_color。

2.3.2风格设置

首先在资源视图中插入对话框,添加一组单选按钮表示画笔样式,再添加一组单选按钮表示画刷样式,包括普通话刷和堆画刷。

再增加一个编辑框和一个旋转按钮,设置旋转按钮属性,是编辑框与旋转按钮成为一体,为对话框建类CTypeallDlg,通过类向导为单选按钮、编辑框、旋转按钮定义关联变量,通过语句将编辑框与旋转按钮关联,

设置旋转按钮值范围及初始值。

在菜单栏添加风格选项,通过类向导为风格添加COMMOND消息处理函数,在函数中调用风格对话框,获取所设置的值,将画笔类型赋给CMyDrawView类的成员变量pentype,pentype为画笔类型变量,将画刷类型赋给CMyDrawView类的成员变量brushtype,brushtype为画刷类型变量,将画笔宽度赋给CMyDrawView类的成员变量penwidth,penwidth为画笔宽度变量。

在绘制直线、手划线、矩形、椭圆时,将画笔类型设置为pentype,将画笔宽度设置为pentype,在绘制矩形、椭圆时,将画刷类型设置为brushtype。

2.3.3字体设置

首先在菜单栏添加字体选项,通过类向导为字体添加COMMOND消息处理函数,在函数中通过调用字体通用对话框获得字体及文字颜色的值,并将字体值赋给CMyDrawView类的成员变量m_fontdlg,m_fontdlg为字体变量,将文字颜色值赋给CMyDrawView类的成员变量m_clrtext,m_clrtext为文字颜色变量。

2.4重绘

2.4.1手划线重绘

首先要新建一般类CLine,基类为CObject,然后为类CLine定义成员变量。

一条线段需要起点、终点、画笔类型、画笔宽度、画笔颜色来确定,在头文件CLine.h中定义两个表示起点和终点的成员变量m_pt1(CPoint类型)和m_pt2(CPoint类型)以及表示画笔类型、画笔宽度、画笔颜色的成员变量pentype(int类型)、penwidth(int类型)、m_color(COLORREF类型),定义成员函数DrawLine(),它根据pt1,pt2,tp,wt,cl画一条直线。

一般都使用数组来保存多条线段的数据,而且MFC提供了实现动态数组的模版。

类CObArray支持CObject指针数组,用它定义对象可以动态生成。

这样可以将存放在每条线段数据的变量的指针存到CObArray类的对象中。

为此在CMyDrawDoc文档类中定义成员变量和成员函数,并包括CLine类定义的头文件。

成员变量m_LineArray是MFC数组类模版CTypedPtrArray的对象,为了使用MFC类模版,必须包含MFC头文件afxtempl.h。

在实现源文件MyDrawDoc.cpp中编写成员函数的实现代码。

在视图类CMyDrawView的鼠标移动处理函数OnMouseMove()中调用AddLine()函数,保存当前线段的起点、终点、画笔类型、画笔宽度、画笔颜色。

在改变窗口大小时,调用OnDraw()函数重新绘制,在其中填写代码将保存在动态数组中的线段一一绘制出来,这样就实现了手划线的重绘。

2.4.2直线重绘

与手划线重绘类似,新建一般类CSline,基类为CObject,同样根据起点、终点、画笔类型、画笔宽度、画笔颜色进行重绘,只是将保存当前线段的起点、终点、画笔类型、画笔宽度、画笔颜色的函数AddSline()放到视图类CMyDrawView的鼠标左键释放处理函数OnLButtonUp()中。

2.4.3矩形重绘

同理,矩形重绘需要新建一般类CRectangle,基类为CObject,根据起点、终点、画笔类型、画笔宽度、画笔颜色、画刷类型进行重绘,与直线重绘一样,也只将保存当前矩形的起点、终点、画笔类型、画笔宽度、画笔颜色、画刷类型的函数AddRectangle()放到视图类CMyDrawView的鼠标左键释放处理函数OnLButtonUp()中。

2.4.4椭圆重绘

同理,椭圆重绘需要新建一般类CEllipse,基类为CObject,根据起点、终点、画笔类型、画笔宽度、画笔颜色、画刷类型进行重绘,与直线重绘一样,也只将保存当前椭圆的起点、终点、画笔类型、画笔宽度、画笔颜色、画刷类型的函数AddEllipse()放到视图类CMyDrawView的鼠标左键释放处理函数OnLButtonUp()中。

2.4.5文字重绘

新建一般类CFonttext,基类为CObject,根据字体、文字颜色、位置、字符串进行重绘,只将保存当前文字的字体、文字颜色、位置、字符串的函数AddFonttext()放到视图类CMyDrawView的鼠标左键按下处理函数OnLButtonDown()中绘制文字函数之前。

2.5序列化

2.5.1手划线序列化

在CLine类的声明头文件Line.h中添加函数Serialize()的声明和DECLARE_SERIAL宏。

在实现源文件Line.cpp中成员函数定义前添加IMPLEMENT_SERIAL宏。

在CLine类Serialize()函数中将起点、终点、画笔类型、画笔宽度、画笔颜色变量进行序列化。

在CMyDrawDoc类Serialize()函数中调用CObArray类的序列化函数。

至此,MyDraw已经实现了文档的读写功能。

为CMyDrawDoc类添加虚函数DeleteContents(),当点击新建命令时实现对当前客户区窗口中所绘制图形的清除。

在文档派生类的成原函数AddLine()调用文档类的成员函数SetModifedFlag(),为程序添加提示保存功能。

2.5.2直线序列化

与手划线序列化做相似的处理,只是对应好相应的类及相应的成员函数。

在CSline类Serialize()函数中将起点、终点、画笔类型、画笔宽度、画笔颜色变量进行序列化。

2.5.3矩形序列化

与手划线序列化做相似的处理,只是对应好相应的类及相应的成员函数。

在CRectangle类Serialize()函数中将起点、终点、画笔类型、画笔宽度、画笔颜色、画刷类型进行序列化。

2.5.4椭圆序列化

与矩形序列化做相似的处理,只是对应好相应的类及相应的成员函数。

在CRectangle类Serialize()函数中将起点、终点、画笔类型、画笔宽度、画笔颜色、画刷类型进行序列化。

2.5.5字体序列化

与上相同,在CFonttext类Serialize()函数中将字体、文字颜色、位置、字符串进行序列化。

未能实现。

2.6附加模块

2.6.1添加画笔、画刷、橡皮

首先在资源视图的图形工具栏中添加三个按钮,分别手绘画笔、画刷、橡皮的按钮图标,通过类向导分别填加画笔、画刷、橡皮的COMMOND消息处理函数,分别填写代码设置shape为5,shape为6,shape为7。

画笔、画刷、橡皮其实就是绘制不同样式的手划线,按照绘制手划线的方式添加代码,画笔与手划线绘制相同,画刷要将创建的画笔宽度设为6,画笔类型设为PS_SOLID,其他不变,橡皮要将画笔宽度设为4,画笔类型设为PS_SOLID,画笔颜色设为白色,其他不变。

在资源视图中插入三个光标cursor,分别手绘画笔、画刷、橡皮的光标,在视图类CMyDrawView的鼠标移动处理函数OnMouseMove()中添加设置光标的代码。

如下当shape=5时设置光标:

HCURSORhCursor=SetCursor(AfxGetApp()->LoadCursor(IDC_CUR_PEN));

在视图类CmyDrawView的构造函数中,初始化shape=5,使得程序运行即为画笔光标。

2.6.2创建颜色工具栏

新建工具栏,添加各种颜色的按钮,第一个为调用颜色通用对话框的按钮,在CmainFrame类的OnCreate()函数中添加创建颜色工具栏的代码,参照系统工具栏的创建方式,通过类向导分别填加各按钮的COMMOND消息处理函数,将对应颜色值赋给m_color,完成颜色的获取。

2.6.3设置工具栏样式

在CmainFrame类的OnCreate()函数中设置图形工具栏和颜色工具栏位置属性分别为CBRS_LEFT、CBRS_BOTTOM,分别将他们放到界面的左方和下方。

分别为工具栏各按钮设置按下凹下和按其他按钮恢复的功能,通过类向导分别为各按钮填加UPDATE_COMMOND_UI的消息处理函数,通过判断按下按钮标志添加如下代码pCmdUI->SetCheck(TRUE)实现按钮按下,pCmdUI->SetCheck(FALSE)实现按钮恢复。

2.6.4在状态栏显示鼠标坐标

在资源视图的StingTable中最后添加ID为ID_POINT,在CmainFrame类中的indicators[]数组第一个元素后添加ID_POINT,在CMyDrawView的鼠标移动处理函数OnMouseMove()中添加实现代码,利用SetPaneText()函数为对应状态栏添加显示鼠标坐标的字符串。

 

3参考文献

[1]王育坚.VisualC++面向对象编程教程.第2版.北京:

清华大学出版社,2008

[2]侯俊杰.深入浅出MFC.第2版.广东:

南方出版社,2007

 

附录

设置工具栏按钮标志:

voidCMyDrawView:

:

Online()//设置图形工具栏按钮标志

{shape=0;

}

voidCMyDrawView:

:

Onsline()

{shape=1;

}

voidCMyDrawView:

:

Onrectangle()

{shape=2;

}

voidCMyDrawView:

:

Ontext()

{shape=4;

}

voidCMyDrawView:

:

Onellipse()

{shape=3;

}

voidCMyDrawView:

:

Onpen()

{shape=5;

}

voidCMyDrawView:

:

Onerase()

{shape=7;

}

voidCMyDrawView:

:

Oncolor1()//设置颜色工具栏按钮返回值及标志

{m_color=RGB(0,0,0);

}

voidCMyDrawView:

:

Oncolor2()

{m_color=RGB(255,255,255);

}

voidCMyDrawView:

:

Oncolor3()

{m_color=RGB(128,128,128);

}

voidCMyDrawView:

:

Oncolor4()

{m_color=RGB(192,192,192);

}

voidCMyDrawView:

:

Oncolor5()

{m_color=RGB(128,0,0);

}

voidCMyDrawView:

:

Oncolor6()

{m_color=RGB(255,0,0);

}

voidCMyDrawView:

:

Oncolor7()

{m_color=RGB(128,128,0);

}

voidCMyDrawView:

:

Oncolor8()

{m_color=RGB(255,255,0);

}

voidCMyDrawView:

:

Oncolor9()

{m_color=RGB(0,128,0);

}

voidCMyDrawView:

:

Oncolor10()

{m_color=RGB(0,255,0);

}

voidCMyDrawView:

:

Oncolor11()

{m_color=RGB(0,128,128);

}

voidCMyDrawView:

:

Oncolor12()

{m_color=RGB(0,255,255);

}

voidCMyDrawView:

:

Oncolor13()

{m_color=RGB(0,0,128);

}

voidCMyDrawView:

:

Oncolor14()

{m_color=RGB(0,0,255);

}

voidCMyDrawView:

:

Oncolor15()

{m_color=RGB(128,0,128);

}

voidCMyDrawView:

:

Oncolor16()

{m_color=RGB(255,0,255);

}

图形绘制模块:

CMyDrawView:

:

CMyDrawView()

{shape=5;//初始化

pentype=0;

brushtype=8;

penwidth=1;

m_bdragging=false;

m_hcross=AfxGetApp()->LoadStandardCursor(IDC_CROSS);//获取十字光标

}

voidCMyDrawView:

:

OnLButtonDown(UINTnFlags,CPointpoint)

{if(shape!

=5&&shape!

=6&&shape!

=7)

{SetCapture();

:

:

SetCursor(m_hcross);

}

m_ptorigin=point;

m_ptnow=point;

m_bdragging=TRUE;

if(shape==4)

{CTextdlg;

if(dlg.DoModal()==IDOK)//调用字体对话框获取字符串

{UpdateData();

stext=dlg.m_text;

CClientDCdc(this);

CMyDrawDoc*pDoc=GetDocument();

ASSERT_VALID(pDoc);

pDoc->AddFonttext(&m_fontdlg,m_clrtext,point,stext);//保存文字格式

CFont*pfntold=dc.SelectObject(&m_fontdlg);

dc.SetTextColor(m_clrtext);

dc.TextOut(point.x,point.y,stext);

dc.SelectObject(pfntold);

}

}

CView:

:

OnLButtonDown(nFlags,point);

}

voidCMyDrawView:

:

OnMouseMove(UINTnFlags,CPointpoint)

{

CClientDCdc(this);

if(shape==5)//获取画笔、画刷、橡皮光标

{HCURSORhCursor=SetCursor(AfxGetApp()->LoadCursor(IDC_CUR_PEN));

}

elseif(shape==6)

{HCURSORhCursor=SetCursor(AfxGetApp()->LoadCursor(IDC_CUR_BRUSH));

}

elseif(shape==7)

{HCURSORhCursor=SetCursor(AfxGetApp()->LoadCursor(IDC_CUR_ERASE));

}

if(m_bdragging)

{CMyDrawDoc*pDoc=GetDocument();

ASSERT_VALID(pDoc);

CPenpennew,*ppenold;

CBrushbrushnew,*pbrushold;

if(shape==0)

{pDoc->AddLine(m_pt

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 理化生

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1