C++实验报告MFC简单画图程序Word格式.docx

上传人:b****6 文档编号:22018191 上传时间:2023-02-02 格式:DOCX 页数:12 大小:95.74KB
下载 相关 举报
C++实验报告MFC简单画图程序Word格式.docx_第1页
第1页 / 共12页
C++实验报告MFC简单画图程序Word格式.docx_第2页
第2页 / 共12页
C++实验报告MFC简单画图程序Word格式.docx_第3页
第3页 / 共12页
C++实验报告MFC简单画图程序Word格式.docx_第4页
第4页 / 共12页
C++实验报告MFC简单画图程序Word格式.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

C++实验报告MFC简单画图程序Word格式.docx

《C++实验报告MFC简单画图程序Word格式.docx》由会员分享,可在线阅读,更多相关《C++实验报告MFC简单画图程序Word格式.docx(12页珍藏版)》请在冰豆网上搜索。

C++实验报告MFC简单画图程序Word格式.docx

创建一个MFCAppWizard[exe]工程,命名为“Draw”,如图1所示,并创建单文档,如图2所示。

创建成功后,系统自动生成相应的类,如图3所示。

图1创建工程

图2创建单文档

图3生成类

2.编辑菜单

添加需要的菜单项,如图4所示;

并在菜单的属性中设定好所对应的ID,如图5所示,各项菜单对应的ID如表1所示(其中线宽菜单为弹出菜单,只需在菜单项目属性中的弹出选项前打勾即可,分隔线亦只需在菜单项目属性中选中分隔符选项即可)。

图4添加菜单项

图5设置菜单ID

表1菜单项对应ID

菜单名

ID

直线

ID_LINE

线宽1

ID_W1

实线

ID_SOLID

矩形

ID_RECT

线宽2

ID_W2

虚线

ID_DASH

椭圆

ID_ELLIPSE

线宽3

ID_W3

点线

ID_DOT

颜色

ID_COLOR

线宽4

ID_W4

点段线

ID_DASHDOT

填充色

ID_FILLCOLOR

线宽5

ID_W5

建立类向导,在视图类CDrawView中,对各菜单项添加对应的COMMAND消息处理函数,部分菜单项还添加对应的UPDATE_COMMAND_UI消息函数,如图6所示。

图6建立类向导

3.在相应消息函数处添加代码,实现其功能

建立类向导,在视图类CDrawView中,添加WM_PAINT消息,以及WM_LBUTTONDOWN、WM_LBUTTONUP、WM_MOUSEMOVE消息,并在其中添加相应的代码。

B关键功能实现

1.选择要绘制的图形

在直线、矩形以及椭圆的消息处理函数里为shape分别赋值为1,2,3,在OnPaint()函数里添加3个if语句的代码来这实现这三个图形的绘制:

当选择画直线时,shape=1,则执行绘制直线代码,当选择画矩形时,shape=2,则执行绘制矩形的代码,当性选择画椭圆时,shape=3,则执行绘制椭圆的代码。

2.改变线宽

在OnPaint()创建的画笔中,pen.CreatePen(penstyle,w,m_nColor),线宽处用w表示,则改变w的值即改变了画笔的粗细。

选择菜单绘图→线宽选择划线宽度值,此时所选的线宽值就赋给线宽变量w。

若不选择线宽值,则w=1(即默认线宽值为1)。

3.改变线型

在OnPaint()创建的画笔中,pen.CreatePen(penstyle,w,m_nColor),线型处用penstyle表示,则改变penstyle的值即改变了画笔的类型。

选择菜单绘图→线型选择线型,此时所选的线型就赋给线型变量penstyle。

若不选择线型值,则penstyle=ID_SOLID(即默认线型为实线)。

4.改变线色

在OnPaint()创建的画笔中,pen.CreatePen(penstyle,w,m_nColor),线的颜色处用m_nColor表示,则改变m_nColor即改变了画笔的颜色。

选择菜单绘图→颜色,会弹出通过WM_COLORREF从系统中引入的颜色选择对话框,选择颜色后,点击确定则相应颜色值就赋给变量m_nColor,此时画笔的颜色就会发上变化。

若不选择颜色,则默认(线)颜色为黑色。

4.改变填充色

在OnPaint()创建的画刷中,brush.CreateSolidBrush(m_fColor),颜色就是用m_fColor表示的,改变m_fColor即改变了画刷的颜色。

选择菜单绘图→填充色,会弹出通过WM_COLORREF从系统中引入的颜色选择对话框,选择颜色后,点击确定则相应颜色值就赋给变量m_fColor,此时画刷的颜色就会发上变化。

若不选择颜色,则默认填充色为黑色。

5.绘制图形

鼠标左键按下,则捕获鼠标此时的位置坐标为画图的起点,此时在OnLButtonDown()函数里,将捕获的坐标值赋给定义作为起点的变量opoint;

按下鼠标左键拖动鼠标时,捕捉鼠标当前位置坐标值为终点坐标值,此时在OnMouseMove()函数里,把捕获的坐标值赋给定义作为终点的变量cpoint,OnPaint()中绘图的代码中的坐标都得到了,进行绘图;

鼠标左键弹起时,此时绘图结束,鼠标弹起时所在位置就是画图的最终终点位置,画图结束后,刷新窗口,以便重新画图,此时执行的是OnLButtonUp()函数。

四、结果及源代码

4.1运行结果

1.点击链接,编译,运行后的窗口如图7所示。

图7运行结果

4.2程序代码

1.在视图类构造函数中对各定义变量初始化

CDrawView:

:

CDrawView()

{

w=1;

//初始状态时线宽

shape=1;

//初始状态时形状

m_nColor=RGB(0,0,0);

//初始状态时线色

m_fColor=RGB(0,0,0);

//初始状态时填充色

penstyle=PS_SOLID;

//初始化线型为实线

}

2.形状函数

voidCDrawView:

OnLine()

OnRect()

shape=2;

OnEllipse()

shape=3;

3.线宽改变函数

OnW1()

OnW2()

w=2;

OnW3()

w=3;

OnW4()

w=4;

OnW5()

w=5;

OnW6()

w=6;

4.线型选择函数

OnSolid()

OnDash()

penstyle=PS_DASH;

OnDot()

penstyle=PS_DOT;

OnDashdot()

penstyle=PS_DASHDOT;

5.颜色选择函数

OnColor()

CColorDialogColor;

//创建颜色对话框

if(Color.DoModal()==IDOK)//如果用户点击OK按钮

{

m_nColor=Color.GetColor();

//更改颜色,把颜色赋到m_nColor

}

6.填充色选择函数

OnFullcolor()

CColorDialogFullColor;

if(FullColor.DoModal()==IDOK)//如果用户点击OK按钮

m_fColor=FullColor.GetColor();

}

7.单击、移动、绘画函数

OnLButtonDown(UINTnFlags,CPointpoint)

m_Down=TRUE;

//鼠标按下

SetCapture();

//获取坐标

opoint=point;

//把鼠标所在坐标赋给起点坐标opoint

ReleaseCapture();

//释放坐标

CView:

OnLButtonDown(nFlags,point);

OnLButtonUp(UINTnFlags,CPointpoint)

m_Down=FALSE;

//鼠标不按下,即弹起

Invalidate(0);

//刷新

OnLButtonUp(nFlags,point);

OnMouseMove(UINTnFlags,CPointpoint)

if(m_Down)//如果鼠标按下

cpoint=point;

//把鼠标所在点坐标赋给终点坐标cpoint

CClientDCdc(this);

if(4==shape)//画曲线

{

CPenpen(PS_SOLID,10,RGB(255,0,0));

CPen*oldpen=dc.SelectObject(&

pen);

dc.MoveTo(opoint);

dc.LineTo(cpoint);

dc.SelectObject(oldpen);

opoint=cpoint;

}

OnMouseMove(nFlags,point);

OnPaint()

CPaintDCdc(this);

//devicecontextforpainting

CPenpen;

//定义画笔

CBrushbrush;

//定义画刷

pen.CreatePen(penstyle,w,m_nColor);

//创建画笔

brush.CreateSolidBrush(m_fColor);

//创建画刷

dc.SelectObject(&

//获取画笔

brush);

//获取画刷

if(1==shape)//画直线

dc.MoveTo(opoint.x,opoint.y);

dc.LineTo(cpoint.x,cpoint.y);

//绘制直线,从opoint到cpoint连线

if(2==shape)///画矩形

dc.Rectangle(opoint.x,opoint.y,cpoint.x,cpoint.y);

//绘制矩形

if(3==shape)//画椭圆

dc.Ellipse(opoint.x,opoint.y,cpoint.x,cpoint.y);

//绘制椭圆

8.菜单勾选函数

OnUpdateLine(CCmdUI*pCmdUI)

pCmdUI->

SetCheck(shape==1);

//shape为1时,直线选项前打上勾

OnUpdateRect(CCmdUI*pCmdUI)

SetCheck(shape==2);

//shape为2时,直线选项前打上勾

OnUpdateEllipse(CCmdUI*pCmdUI)

SetCheck(shape==3);

//shape为3时,直线选项前打上勾

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

当前位置:首页 > 高等教育 > 农学

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

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