VC课程设计说明书

更新时间:2023-06-02 08:54:01 阅读量: 实用文档 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

唐山学院

VC程序设计课程设计

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

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

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

姓名任招静

学号2060206124

指导教师郭琳虹

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

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

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

1、设计题目:绘图应用程序的设计与实现

2、设计内容及要求:

利用MFC应用程序、图形处理的基本知识,设计一个绘图应用程序,具有以下功能:①图形绘制功能:直线、椭圆、矩形、文本(必须实现的功能)②图形修改功能:线条颜色、线条类型、填充方式的设置(必须实现的功能)③数据保存功能:能够把图形数据保存到文件中(选做功能)④具有删除、剪切、撤销等编辑功能(选做功能)。

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

1、用Visual C++进行编码,实现应用程序的功能。注重编码质量,代码要有适当的注释;

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

三、进程安排

6月29日:完成需求分析,确定程序功能,确立程序设计思想

6月30日~7月1日:进行详细设计,实现编码

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

7月3日:答辩

四、主要参考资料

[1]王育坚.Visual C++面向对象编程教程.第2版.北京:清华大学出版社,2008

[2]侯俊杰.深入浅出MFC.第2版.广东:南方出版社,2007

指导教师(签名):教研室主任(签名):

注:可以附页

课程设计成绩评定表

出勤情况出勤天数缺勤天数

成绩评定出勤情况及设计过程表现(20分)课设答辩(20分)

设计成果(60分)

总成绩(100分)

提问

(答辩)

问题

情况

指导教师签名:

年月日

唐山学院课程设计

11总体设计

1.1程序设计思想

根据绘图板的构造及用户的需求,首先要具有最基本的画图工具栏,其中具有曲线、直线、矩形、椭圆等基本图形按钮及文字按钮,当按下不同按钮时,需要完成不同图形的绘制,这就要添加WM_LBUTTONDOWN、WM_LBUTTONUP、WM_MOUSEMOVE 的消息处理函数,并填写相应语句以实现图形及文本绘制。若想设置所绘图形的颜色、线宽及样式,需要设置不同的画笔和画刷,设置颜色可以通过调用颜色通用对话框返回颜色值,而字体的设置也可通过调用字体通用对话框返回字体值。其次,当改变窗口大小时,所绘内容将要消失,这时就需要对所绘图形及文字进行重绘。然后,要想实现所绘图形的保存,就需要对各个图形及字体进行序列化。最后,可以加一些附加设置,增加画笔、画刷、橡皮按钮,创建颜色工具栏,在状态栏显示鼠标坐标。

1.2程序流程图

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

图1程序流程图打开

显示保存图形

图形文本绘制

设置图形文本格式序列化

是否打开保存图形

是否保存

关闭

唐山学院课程设计

21.3程序模块图

绘图应用程序包括四个主要模块:绘制图形文字模块、设置图形文字格式模块、重绘模块、图形文字序列化模块。

图2程序模块图绘图

应用

程序绘制图形文字绘制手划线

设置图形字体格式

重绘图形文字序列化设置文字格式设置画刷样式设置画笔样式

绘制文字

绘制椭圆

绘制矩形

绘制直线

重绘手划线

重绘直线

重绘矩形

重绘椭圆

手划线序列化

矩形序列化

直线序列化

椭圆序列化

重绘文字

文字序列化

唐山学院课程设计

1.4程序设计步骤

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

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

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

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

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

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

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

1.5程序功能介绍

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

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

3.设置画笔颜色

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

5.设置字体

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

7.保存并打开所绘图形

3

唐山学院课程设计

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()函数中才真正

4

唐山学院课程设计

调用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重绘

5

唐山学院课程设计

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()中。

6

唐山学院课程设计

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字体序列化

7

唐山学院课程设计

与上相同,在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时设置光标:

HCURSOR hCursor=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在状态栏显示鼠标坐标

在资源视图的Sting Table中最后添加ID为ID_POINT,在CmainFrame类中的indicators[]数组第一个元素后添加ID_POINT,在CMyDrawView的鼠标移动处理函数

8

唐山学院课程设计

OnMouseMove()中添加实现代码,利用SetPaneText()函数为对应状态栏添加显示鼠标坐标的字符串。

9

唐山学院课程设计

3参考文献

[1]王育坚.Visual C++面向对象编程教程.第2版.北京:清华大学出版社,2008

[2]侯俊杰.深入浅出MFC.第2版.广东:南方出版社,2007

10

唐山学院课程设计

附录

设置工具栏按钮标志:

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

{shape=0;

}

void CMyDrawView::Onsline()

{shape=1;

}

void CMyDrawView::Onrectangle()

{shape=2;

}

void CMyDrawView::Ontext()

{shape=4;

}

void CMyDrawView::Onellipse()

{shape=3;

}

void CMyDrawView::Onpen()

{shape=5;

}

void CMyDrawView::Onerase()

{shape=7;

}

void CMyDrawView::Oncolor1()//设置颜色工具栏按钮返回值及标志{m_color=RGB(0,0,0);

}

void CMyDrawView::Oncolor2()

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

}

void CMyDrawView::Oncolor3()

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

}

void CMyDrawView::Oncolor4()

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

11

唐山学院课程设计

}

void CMyDrawView::Oncolor5()

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

}

void CMyDrawView::Oncolor6()

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

}

void CMyDrawView::Oncolor7()

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

}

void CMyDrawView::Oncolor8()

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

}

void CMyDrawView::Oncolor9()

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

}

void CMyDrawView::Oncolor10()

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

}

void CMyDrawView::Oncolor11()

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

}

void CMyDrawView::Oncolor12()

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

}

void CMyDrawView::Oncolor13()

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

}

void CMyDrawView::Oncolor14()

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

}

void CMyDrawView::Oncolor15()

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

}

void CMyDrawView::Oncolor16()

12

唐山学院课程设计

{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);//获取十字光标}

void CMyDrawView::OnLButtonDown(UINT nFlags,CPoint point)

{if(shape!=5&&shape!=6&&shape!=7)

{SetCapture();

::SetCursor(m_hcross);

}

m_ptorigin=point;

m_ptnow=point;

m_bdragging=TRUE;

if(shape==4)

{CText dlg;

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

{UpdateData();

stext=dlg.m_text;

CClientDC dc(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);

}

}

13

唐山学院课程设计

CView::OnLButtonDown(nFlags,point);

}

void CMyDrawView::OnMouseMove(UINT nFlags,CPoint point)

{

CClientDC dc(this);

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

{HCURSOR hCursor=SetCursor(AfxGetApp()->LoadCursor(IDC_CUR_PEN));

}

else if(shape==6)

{HCURSOR hCursor= SetCursor(AfxGetApp()->LoadCursor(IDC_CUR_BRUSH));

}

else if(shape==7)

{HCURSOR hCursor= SetCursor(AfxGetApp()->LoadCursor(IDC_CUR_ERASE));

}

if(m_bdragging)

{CMyDrawDoc*pDoc=GetDocument();

ASSERT_VALID(pDoc);

CPen pennew,*ppenold;

CBrush brushnew,*pbrushold;

if(shape==0)

{pDoc->AddLine(m_ptorigin,point,pentype,penwidth,m_color);//保存手划线格式

pennew.CreatePen(pentype,penwidth,m_color);//创建一定风格画笔ppenold=dc.SelectObject(&pennew);

dc.MoveTo(m_ptorigin);

dc.LineTo(point);

dc.SelectObject(ppenold);

pennew.DeleteObject();

m_ptorigin=point;

}

if(shape==1)

{int nDrawmdoe=dc.GetROP2();//设置虚画笔

dc.SetROP2(R2_NOTCOPYPEN);

14

唐山学院课程设计

dc.MoveTo(m_ptorigin);

dc.LineTo(m_ptnow);

dc.SetROP2(nDrawmdoe);

dc.MoveTo(m_ptorigin);

dc.LineTo(point);

m_ptnow=point;

}

if(shape==2)

{int type1;

if(brushtype>5)//得到堆画刷类型的变量

{if(brushtype==6)

{type1=BLACK_BRUSH;}

if(brushtype==7)

{type1=WHITE_BRUSH;}

if(brushtype==8)

{type1=NULL_BRUSH;}

if(brushtype==9)

{type1=GRAY_BRUSH;}

if(brushtype==10)

{type1=DKGRAY_BRUSH;}

if(brushtype==11)

{type1=LTGRAY_BRUSH;}

brushnew.CreateStockObject(type1);

pbrushold=dc.SelectObject(&brushnew);

}

else if(brushtype<=5)

{brushnew.CreateHatchBrush(brushtype,m_color);//设置普通画刷pbrushold=dc.SelectObject(&brushnew);

}

int nDrawmdoe=dc.GetROP2();

dc.SetROP2(R2_NOTCOPYPEN);//设置虚画笔

dc.Rectangle(CRect(m_ptorigin,m_ptnow));

dc.SetROP2(nDrawmdoe);

dc.Rectangle(CRect(m_ptorigin,point));

dc.SelectObject(pbrushold);

15

唐山学院课程设计

brushnew.DeleteObject();

m_ptnow=point;

}

if(shape==3)

{//pbrushold=(CBrush*)dc.SelectStockObject(NULL_BRUSH);

if(brushtype>5)//得到堆画刷类型的变量

{int type2;

if(brushtype==6)

type2=BLACK_BRUSH;

if(brushtype==7)

type2=WHITE_BRUSH;

if(brushtype==8)

type2=NULL_BRUSH;

if(brushtype==9)

type2=GRAY_BRUSH;

if(brushtype==10)

type2=DKGRAY_BRUSH;

if(brushtype==11)

type2=LTGRAY_BRUSH;

brushnew.CreateStockObject(type2);

pbrushold=dc.SelectObject(&brushnew);

//pbrushold=(CBrush*)dc.SelectStockObject(brushtype);

}

else if(brushtype<=5)

{brushnew.CreateHatchBrush(brushtype,m_color);

pbrushold=dc.SelectObject(&brushnew);

}

int nDrawmdoe=dc.GetROP2();

dc.SetROP2(R2_NOTCOPYPEN);//设置虚画笔

dc.Ellipse(CRect(m_ptorigin,m_ptnow));

dc.SetROP2(nDrawmdoe);

dc.Ellipse(CRect(m_ptorigin,point));

dc.SelectObject(pbrushold);

brushnew.DeleteObject();

m_ptnow=point;

16

唐山学院课程设计

}

if(shape==5)

{pDoc->AddLine(m_ptorigin,point,pentype,penwidth,m_color);//保存画笔所画线条格式

pennew.CreatePen(pentype,penwidth,m_color);//创建一定风格画笔

ppenold=dc.SelectObject(&pennew);

dc.MoveTo(m_ptorigin);

dc.LineTo(point);

dc.SelectObject(ppenold);

pennew.DeleteObject();

m_ptorigin=point;

}

if(shape==6)

{

pDoc->AddLine(m_ptorigin,point,PS_SOLID,6,m_color);//保存画刷所画线条格式

pennew.CreatePen(PS_SOLID,6,m_color);//创建画刷的风格

ppenold=dc.SelectObject(&pennew);

dc.MoveTo(m_ptorigin);

dc.LineTo(point);

dc.SelectObject(ppenold);

pennew.DeleteObject();

m_ptorigin=point;

}

if(shape==7)

{

pDoc->AddLine(m_ptorigin,PS_SOLID,pentype,4,RGB(255,255,255));//保存橡皮所画线条格式

pennew.CreatePen(PS_SOLID,4,RGB(255,255,255));//创建橡皮的风格

ppenold=dc.SelectObject(&pennew);

dc.MoveTo(m_ptorigin);

dc.LineTo(point);

dc.SelectObject(ppenold);

pennew.DeleteObject();

m_ptorigin=point;

17

唐山学院课程设计

}

}

CView::OnMouseMove(nFlags,point);

}

void CMyDrawView::OnLButtonUp(UINT nFlags,CPoint point)

{

CClientDC dc(this);

if(m_bdragging)

{CMyDrawDoc*pDoc=GetDocument();

ASSERT_VALID(pDoc);

CPen pennew,*ppenold;

pennew.CreatePen(pentype,penwidth,m_color);//创建一定风格画笔

CBrush brushnew,*pbrushold;

ppenold=dc.SelectObject(&pennew);

if(shape==1)

{pDoc->AddSline(m_ptorigin,point,pentype,penwidth,m_color);//保存直线格式dc.MoveTo(m_ptorigin);

dc.LineTo(point);

}

if(shape==2)

{pDoc->AddRectangle(m_ptorigin,point,brushtype,m_color,pentype,penwidth);//保存矩形格式

if(brushtype>5)//得到堆画刷类型的变量

{int type1;

if(brushtype==6)

type1=BLACK_BRUSH;

if(brushtype==7)

type1=WHITE_BRUSH;

if(brushtype==8)

type1=NULL_BRUSH;

if(brushtype==9)

type1=GRAY_BRUSH;

if(brushtype==10)

type1=DKGRAY_BRUSH;

if(brushtype==11)

18

本文来源:https://www.bwwdw.com/article/qtz1.html

Top