简单画图程序设计.docx
- 文档编号:9426389
- 上传时间:2023-02-04
- 格式:DOCX
- 页数:25
- 大小:379.67KB
简单画图程序设计.docx
《简单画图程序设计.docx》由会员分享,可在线阅读,更多相关《简单画图程序设计.docx(25页珍藏版)》请在冰豆网上搜索。
简单画图程序设计
面向对象程序设计
课程设计报告
设计题目:
简单画图程序的设计
学院:
信息工程学院
专业:
计算机科学与技术(交通)
学号:
姓名:
指导教师:
2015年1月4日
1.设计目的和内容1
1.1.设计目的1
1.2.设计内容1
2.基本功能1
2.1.图形样式1
2.2.颜色样式2
2.3.画笔样式2
2.4.线型选择3
3.设计思路3
4.软件设计5
4.1.设计步骤5
4.2.界面设计8
4.3.关键功能的实现9
5.心得体会11
6.参考文献11
7.附录11
7.1.调试报告11
7.2.调试结果12
7.3.关键源代码12
1.设计目的和内容
1.1.设计目的
1、学习VisualC++的MFC开发程序的步骤
2、综合运用所学的类、继承和多态的知识
3、进一步掌握程序调试的方法
1.2.设计内容
1、利用MFC的向导,创建基于单文档的应用程序
2、编程实现,绘制线、圆、矩形的功能
3、能够设定当前要画的图形样式(最少为以上3种)和图形颜色(最少能够设为以下4种颜色:
黑、红、绿、蓝)
4、当窗口重绘后,还能保持原来的图形
5、选做1:
能够选中某些已绘制的图形,并删除之
6、选做2:
能够保存已绘制的图形,下次打开时恢复原状
2.基本功能
2.1.图形样式
在菜单栏的设置里面有图形样式的选择,可以点击选中也可以在工具栏里点击图形的图标,能够实现绘制点、直线、矩形和椭圆的功能。
第1页
2.2.颜色样式
在菜单栏的设置里面有颜色样式的选择,可以点击选中也可以在工具栏里点击颜色的图标,除了能够实现红、绿、蓝、黄、黑的普通选择,同时还加入了一个颜色板,点击更多(…)可以在调色板上选择任意的颜色。
菜单和工具栏选色:
调色板选色:
2.3.画笔样式
在菜单栏的设置里面有画笔样式的选择,可以点击选中即改变画笔的线宽,也可以在工具栏里点击表示画笔宽度的快捷按钮,线宽有从标准、一般、略粗和更粗的选择。
第2页
2.4.线型样式
在菜单栏的设置里面有关于线型的选择,可以点击菜单栏的选项也可以在工具栏里找到表示线型的三个按钮,点击即可修改所选的线型。
3.设计思路
1、根据需要用到的变量设定变量并进行初始化
2、选择相应的图形、颜色、画笔、线型之后就响应相应的消息,给需要的变量赋上相应类型的值
3、鼠标按下响应函数OnLBottonDown(),捕捉当前位置得到坐标起点,鼠标弹起响应函数OnLBottonUp()得到另一个坐标则可以进行图形绘制
第3页
4、选择其他属性即可进行绘制不同颜色、线宽、线型的图形
5、流程图如下:
第4页
4.软件设计
4.1.设计步骤
1、创建一个MFCAppWizard工程命名为”ZYFdraw”,建立一个单文档,系统会自动生
第5页
成相应的类。
第6页
2、编辑菜单,在菜单里面增加对应的菜单项并设定对应的ID,需要改变属性只要点击菜单项就可以。
3、在相应的消息函数添加代码,实现功能
第7页
4.2.界面设计
在菜单里面增加绘图按钮,包括“图形样式”、“颜色样式”、“画笔样式”和“线型样式”四个子按钮;在工具栏里面添加相应的快捷按钮,更方便于绘图时候的操作。
添加菜单栏的项目:
菜单项ID
菜单项名称
菜单项命令响应函数
IDM_DDOT
点
OnDdot
IDM_DLINE
直线
OnDline
IDM_DRECTANGLE
矩形
OnDrectangle
IDM_DELLIPSE
椭圆
OnDellipse
IDM_CRED
红色
OnCred
IDM_CGREEN
绿色
OnCgreen
IDM_CBLUE
蓝色
OnCblue
IDM_CYELLOW
黄色
OnCyellow
IDM_CMORE
更多(…)
OnCmore
IDM_CPSLIM
标准
OnCpslim
IDM_CPMIDDLE
一般
OnCpmiddle
IDM_CPBIG
略粗
OnCpbig
IDM_CPMORE
更粗
OnCpmore
IDM_LSTYLE
实线
OnLstyle
IDM_LSTYLEDASH
虚线
OnLstyledash
IDM_LSTYLEDOT
点线
OnLstyledot
第8页
添加工具栏的项目:
菜单项ID
菜单项名称
菜单项命令响应函数
IDM_SDOT
点
OnSdot
IDM_SLINE
直线
OnSline
IDM_SRECTANGLE
矩形
OnSrectangle
IDM_SELLIPSE
椭圆
OnSellipse
IDM_SRED
红色
OnSred
IDM_SGREEN
绿色
OnSgreen
IDM_SBLUE
蓝色
OnSblue
IDM_SYELLOW
黄色
OnSyellow
IDM_SPSLIM
标准
OnSpslim
IDM_SPMIDDLE
一般
OnSpmiddle
IDM_SPBIG
略粗
OnSpbig
IDM_SPMORE
更粗
OnSpmore
IDM_SLSOLID
实线
OnSlsolid
IDM_SLDASH
虚线
OnSldash
IDM_SLDOT
点线
OnSldot
界面如下:
4.3.关键功能的实现
当鼠标点击菜单栏或者工具栏响应的图形和属性按钮时,即可改变所要画的图形以及画笔的属性。
4.3.1.绘图:
左键点击工具栏的四个绘图按钮的任意一个可以选择自己需要的图形(点、直线、矩形、椭圆),如下图所示:
第9页
4.3.2.颜色:
左键点击工具栏的四个颜色按钮可以选择颜色(红色、绿色、蓝色、黄色)还可以在菜单栏的绘图的颜色样式里面点击更多出现调色板选择更多的颜色,如下图所示:
4.3.3.笔宽:
左键点击菜单栏的画笔样式或工具栏以下四个按钮即可改变画笔的宽度,如下图所示:
第10页
4.3.4.线型:
左键点击菜单栏的线型样式或在工具栏点击以下三个按钮可以选择实线、虚线和点线的线型,如下图所示:
5.心得体会
这次课程设计我成功的完成了。
通过本次的课程设计,我学会了运用鼠标点击完成绘制点、直线、矩形和椭圆的绘图功能。
编写一个简单的绘图程序,完成了绘图时图形、颜色、画笔宽度以及线型的选择。
基于这次的课设,对菜单界面的建立,消息响应函数处理,创建句柄都比较熟悉了,但是难的地方在于代码的编写。
在这次的课设中由于要绘制图形,所以比较关键的是坐标(m_point,point)两个起点和终点的。
因此,我设立了消息响应函数OnLButtonDown()以及OnLButtonUp()还获取鼠标的当前坐标和终点坐标。
绘制图形也是在OnLButtonUp()
的函数里面实现的。
为了实现图形的重绘,定义了一个Cdraw的类,在里面重新定义了变量用于保存已绘的图形,其中还是使用了MFC系统自带的一个CPtrArray动态数组。
在OnLButtonUp()里面绘制图形,通过自定义的类Cdraw与动态数组CPtrArray在OnDraw()里面实现重绘,这样使得整个程序的结构较为清楚和简便。
通过这次的课设让我明白了即使一个小小的绘图程序都是如此复杂,更何况是电脑里面的成千上万的程序呢,自己知道的东西还是太少了,以后要加强学习。
6.参考文献
【1】孙鑫VC++深入详解(修订版)电子工业出版社2012年
【2】梁普选VisualC++程序设计与实践清华大学出版2005年
【3】严华峰VISUALC++课程设计案例精编(第二版)中国水利水电出版社2004年
【4】魏亮、李春葆等VisualC++程序设计例学与实践清华大学出版社2006年
7.附录
7.1.调试报告
开始时没有创建Cdraw类来保存已经绘制的图形,所以每次在绘好图形以后拉动窗口,图形被刷新就消失了。
在创建了Cdraw类后我们通过系统自带的动态数组保存已绘的图形,在在OnDraw()里面调用以保存的图形,则在拖动窗口时图形不消失。
第11页
7.2.调试结果
1、编译运行后的窗口如下:
2、改变绘图的画笔粗细,颜色、形状得到的窗口如下:
7.3.关键源代码
1、在CZYFdrawVIEW类的头文件中加入私有成员变量:
private:
intm_lstyle;
intm_pwidth;
CPtrArraym_cptArray;
第12页
COLORREFm_color;
CPointm_point;
UINTm_type;
2、其中各个成员变量的代码实现如下:
voidCZYFdrawView:
:
OnDdot()//点
{
//TODO:
Addyourcommandhandlercodehere
m_type=1;
}
voidCZYFdrawView:
:
OnDline()//直线
{
//TODO:
Addyourcommandhandlercodehere
m_type=2;
}
voidCZYFdrawView:
:
OnDrectangle()//矩形
{
//TODO:
Addyourcommandhandlercodehere
m_type=3;
}
voidCZYFdrawView:
:
OnDellipse()//椭圆
{
//TODO:
Addyourcommandhandlercodehere
m_type=4;
}
//颜色
voidCZYFdrawView:
:
OnCred()//红色
{
//TODO:
Addyourcommandhandlercodehere
m_color=RGB(255,0,0);
}
第13页
voidCZYFdrawView:
:
OnCgreen()//绿色
{
//TODO:
Addyourcommandhandlercodehere
m_color=RGB(0,255,0);
}
voidCZYFdrawView:
:
OnCblue()//蓝色
{
//TODO:
Addyourcommandhandlercodehere
m_color=RGB(0,0,255);
}
voidCZYFdrawView:
:
OnCyellow()//黄色
{
//TODO:
Addyourcommandhandlercodehere
m_color=RGB(255,255,0);
}
voidCZYFdrawView:
:
OnCmore()//更多
{
//TODO:
Addyourcommandhandlercodehere
CColorDialogdlg;
dlg.m_cc.Flags|=CC_RGBINIT|CC_FULLOPEN;//弹出对话框
dlg.m_cc.rgbResult=m_color;//记录颜色
if(IDOK==dlg.DoModal())
{
m_color=dlg.m_cc.rgbResult;
}
}
//笔宽
voidCZYFdrawView:
:
OnCpslim()//标准
{
//TODO:
Addyourcommandhandlercodehere
m_pwidth=2;
}
voidCZYFdrawView:
:
OnCpmiddle()//中等
第14页
{
//TODO:
Addyourcommandhandlercodehere
m_pwidth=4;
}
voidCZYFdrawView:
:
OnCpbig()//粗
{
//TODO:
Addyourcommandhandlercodehere
m_pwidth=8;
}
voidCZYFdrawView:
:
OnCpmore()//更粗
{
//TODO:
Addyourcommandhandlercodehere
m_pwidth=10;
}
//线型
voidCZYFdrawView:
:
OnLstyle()//实线
{
//TODO:
Addyourcommandhandlercodehere
m_lstyle=0;
}
voidCZYFdrawView:
:
OnLstyledash()//虚线
{
//TODO:
Addyourcommandhandlercodehere
m_lstyle=1;
}
voidCZYFdrawView:
:
OnLstyledot()//点线
{
//TODO:
Addyourcommandhandlercodehere
m_lstyle=2;
}
3、在OnLButtonDown()中实现记录起点:
voidCZYFdrawView:
:
OnLButtonDown(UINTnFlags,CPointpoint)
第15页
{
//TODO:
Addyourmessagehandlercodehereand/orcalldefault
m_point=point;
CView:
:
OnLButtonDown(nFlags,point);
}
4、在OnLButtonUp()中实现绘画图形功能的代码如下:
voidCZYFdrawView:
:
OnLButtonUp(UINTnFlags,CPointpoint)
{
//TODO:
Addyourmessagehandlercodehereand/orcalldefault
CClientDCdc(this);
CPenpen(m_lstyle,m_pwidth,m_color);
dc.SelectObject(&pen);
//空白画刷使图形不覆盖
CBrush*pBrush=CBrush:
:
FromHandle((HBRUSH)GetStockObject(NULL_BRUSH));
dc.SelectObject(pBrush);
switch(m_type)
{
case1:
dc.SetPixel(point,m_color);
break;
case2:
dc.MoveTo(m_point);
dc.LineTo(point);
break;
case3:
dc.Rectangle(CRect(m_point,point));
break;
case4:
dc.Ellipse(CRect(m_point,point));
break;
}
dc.SelectObject(pBrush);
dc.SelectObject(&pen);
Cdraw*pdraw=newCdraw(m_type,m_color,m_pwidth,m_lstyle,m_point,point);
m_cptArray.Add(pdraw);
CView:
:
OnLButtonUp(nFlags,point);
}
5、在OnDraw()中实现图形重绘之前要自己重新定义一个新的类”Cdraw”,并在类中保存需要保存的变量代码如下:
第16页
Cdraw类
变量全部设为共有类型的:
classCdraw
{
public:
intm_lstyle;
intm_pwidth;
UINTm_type;
COLORREFm_color;
CPointm_point;
CPointm_ptEnd;
Cdraw();
Cdraw(UINTm_type,COLORREFm_color,intm_pwidth,intm_lstyle,CPointm_point,CPointm_ptend);
virtual~Cdraw();
private:
};
Cdraw:
:
Cdraw(UINTm_type,COLORREFm_color,intm_pwidth,intm_lstyle,CPointm_point,CPointm_ptEnd)
{
this->m_type=m_type;
this->m_color=m_color;
this->m_pwidth=m_pwidth;
this->m_lstyle=m_lstyle;
this->m_point=m_point;
this->m_ptEnd=m_ptEnd;
}
6、实现图形重绘:
voidCZYFdrawView:
:
OnDraw(CDC*pDC)
{
CZYFdrawDoc*pDoc=GetDocument();
ASSERT_VALID(pDoc);
//TODO:
adddrawcodefornativedatahere
CBrush*pBrush=CBrush:
:
FromHandle((HBRUSH)GetStockObject(NULL_BRUSH));
pDC->SelectObject(pBrush);
for(inti=0;i { CPenpen(((Cdraw*)m_cptArray.GetAt(i))->m_lstyle,((Cdraw*)m_cptArray.GetAt(i))->m_pwidth,((Cdraw*)m_cptArray.GetAt(i))->m_color); 第17页 CPen*pOldPen=pDC->SelectObject(&pen); switch(((Cdraw*)m_cptArray.GetAt(i))->m_type) { case1: pDC->SetPixel(((Cdraw*)m_cptArray.GetAt(i))->m_ptEnd,((Cdraw*)m_cptArray.GetAt(i))->m_color); break; case2: pDC->MoveTo(((Cdraw*)m_cptArray.GetAt(i))->m_point); pDC->LineTo(((Cdraw*)m_cptArray.GetAt(i))->m_ptEnd); break; case3: pDC->Rectangle(CRect(((Cdraw*)m_cptArray.GetAt(i))->m_point,((Cdraw*)m_cptArray.GetAt(i))->m_ptEnd)); break; case4: pDC->Ellipse(CRect(((Cdraw*)m_cptArray.GetAt(i))->m_point,((Cdraw*)m_cptArray.GetAt(i))->m_ptEnd)); break; } pDC->SelectObject(pOldPen); } } 第18页
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 简单 画图 程序设计