简单画图程序课程设计报告全解Word格式.docx

上传人:b****1 文档编号:13257222 上传时间:2022-10-09 格式:DOCX 页数:19 大小:456.50KB
下载 相关 举报
简单画图程序课程设计报告全解Word格式.docx_第1页
第1页 / 共19页
简单画图程序课程设计报告全解Word格式.docx_第2页
第2页 / 共19页
简单画图程序课程设计报告全解Word格式.docx_第3页
第3页 / 共19页
简单画图程序课程设计报告全解Word格式.docx_第4页
第4页 / 共19页
简单画图程序课程设计报告全解Word格式.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

简单画图程序课程设计报告全解Word格式.docx

《简单画图程序课程设计报告全解Word格式.docx》由会员分享,可在线阅读,更多相关《简单画图程序课程设计报告全解Word格式.docx(19页珍藏版)》请在冰豆网上搜索。

简单画图程序课程设计报告全解Word格式.docx

1)在单文档菜单中,在菜单行中可插入一个菜单项,命名为绘图,在下拉菜单中可分别设置绘制的图形形状,如直线、矩形及椭圆,线宽选项,有1-5可供选择,还可以设置线色以及填充色,通过弹出的颜色对话框选择需要的颜色,如果不选择线宽、线色以及填充色,则按默认的画笔,画刷来绘制选择的图形。

2)选择好图形后,通过鼠标可以绘制出相应的直线,矩形或椭圆,鼠标的按下确定图形的起点,鼠标的拖动则确定了图形的终点,即通过鼠标的拖动来决定图形的大小,当鼠标弹起,此图形则绘制完毕。

3)增添工具栏,设置绘制的图形形状,线色以及填充色,可更方便地选择相应的功能。

2设计思路

1)对需要用到的变量进行初始化。

2)选择相应的图形之后就响应相应的消息处理函数,给shape赋对应的值。

选择不同的线宽,线色与填充色,即可改变画笔或画刷的属性。

3)鼠标的按下响应函数OnLButtonDown(),捕捉鼠标当前位置得到起点的坐标,鼠标的拖动响函数OnMouseMove()改变终点的坐标,鼠标的弹起响应OnLButtonUp(),确定终点坐标,刷新,得到绘制图形。

4)选择图形或其它属性,可进行下一次绘制。

 

图1程序流程图

3软件设计

3.1设计步骤

1)创建单文档

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

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

图2创建工程

图3创建单文档

图4生成类

2)编辑菜单

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

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

图5添加菜单项

图6设置菜单ID

表1菜单项对应ID

菜单名

ID

直线

ID_LINE

线宽1

ID_W1

矩形

ID_RECT

线宽2

ID_W2

椭圆

ID_ELLIPSE

线宽3

ID_W3

颜色

ID_COLOR

线宽4

ID_W4

填充色

ID_FILLCOLOR

线宽5

ID_W5

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

图7建立类向导

3)创建工具栏

在插入处选择资源,新建工具栏,如图7所示;

图8新建工具栏

在工具栏上添加相应的按钮,在属性处更改其ID,如图8所示。

图9编辑工具栏

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

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

图10添加WM_PAINT消息

3.2界面设计

各控件名称,类型,属性及相关变量如表2所示。

表2界面控件表

控件名称

控件类型

属性

相关变量

绘图

下拉式菜单

直线

菜单项

工具栏按钮

intshape

续表2界面控件表

菜单项

线宽

弹出式菜单

intw

颜色(线色)

COLORREFm_nColor

COLORREFm_fColor

3.3关键功能实现

1)选择要绘制的图形

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

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

2)改变线宽

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

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

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

3)改变线色

在OnPaint()创建的画笔中,pen.CreatePen(PS_SOLID,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()函数。

图11快捷键的创建

4.附录

4.1调试报告

1)一开始我并没有添加刷新函数Invalidate(),这就使程序运行之后,无论鼠标左键按下时如何移动无法绘图,这是因为当一个窗口内键入内容其实就是将窗口刷新了,相当于更新了窗口,故必须有刷新函数,这和生活中的白纸写字不一样。

2)当添加Invalidate()后,我把Invalidate()放在OnMouseMove()里,但是这样只能在窗口内画一个图形,即每画完一个图形就刷新一次。

之后我通过与同学讨论,并查找资料将Invalidate()改为了Invalidate(0),这时是可绘制多个图形,但鼠标每移动一个位置都进行一次刷新,绘图结束后,绘图过程中的所有痕迹都在,产生了很多拖动的影子。

,经过几次试验,我将Invalidate(0)放在了OnLButtonUp()中,那么每次重绘,上次的图形会作为背景被保留下来,而不会被刷新掉。

4.2测试结果

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

图11运行结果

2)改变绘制图形形状,颜色,线宽,填充色之后绘制的图形如图12所示。

图12改便各项属性厚后的图形

4.3关键源代码

1)在“MainFrm.h”中,在classCMainFrame:

publicCFrameWnd里的protected下定义:

CToolBarm_drawToolBar;

//工具栏

2)在“MainFrm.cpp”中,在CMainFrame:

:

OnCreate(LPCREATESTRUCTlpCreateStruct)里添加以下代码:

if(!

m_drawToolBar.Create(this)||

!

m_drawToolBar.LoadToolBar(IDR_DRAW))

{TRACE0("

Failedtocreatestatusbar\n"

);

return-1;

}

3)在“YinshuyanView.h”中,在classCYinshuyanView:

publicCView里的public下定义相关变量:

COLORREFm_nColor;

COLORREFm_fColor;

CPointcpoint;

CPointopoint;

BOOLm_Down;

intw;

intshape;

4)在“YinshuyanView.cpp”中,添加如下函数及代码:

CYinshuyanView:

CYinshuyanView()

{w=1;

//初始线宽默认为1

shape=0;

}

voidCYinshuyanView:

OnW1()

{

w=1;

//令线宽为1

}

voidCYinshuyanView:

OnW2()

w=2;

//令线宽

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

当前位置:首页 > 外语学习 > 其它语言学习

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

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