简单画图程序设计
面向对象程序设计
课程设计报告
设计题目: 简单画图程序的设计
学院: 专业: 学号:
姓名: 信息工程学院 计算机科学与技术(交通)
指导教师:
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、 学习Visual C++的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、 创建一个MFC AppWizard工程命名为”ZYFdraw ”,建立一个单文档,系统会自动生
第5页
成相应的类。
第6页
2、 编辑菜单,在菜单里面增加对应的菜单项并设定对应的ID ,需要改变属性只要点击菜单
项就可以。
3、 在相应的消息函数添加代码,实现功能
第7页
4.2. 界面设计
在菜单里面增加绘图按钮,包括“图形样式”、“颜色样式”、“画笔样式”和“线型样式”四个子按钮;在工具栏里面添加相应的快捷按钮,更方便于绘图时候的操作。
添加工具栏的项目:
第8页
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】梁普选 Visual C++程序设计与实践清华大学出版 2005年
【3】严华峰 VISUAL C++课程设计案例精编(第二版)中国水利水电出版社 2004年 【4】魏亮、李春葆等 Visual C++程序设计例学与实践清华大学出版社 2006年
7. 附录
7.1. 调试报告
开始时没有创建Cdraw 类来保存已经绘制的图形,所以每次在绘好图形以后拉动
窗口,图形被刷新就消失了。
在创建了Cdraw 类后我们通过系统自带的动态数组保存已绘的图形,在在OnDraw()里面调用以保存的图形,则在拖动窗口时图形不消失。
第11页
7.2. 调试结果
1、 编译运行后的窗口如下:
2、 改变绘图的画笔粗细,颜色、形状得到的窗口如下:
7.3. 关键源代码
1、在CZYFdrawVIEW 类的头文件中加入私有成员变量: private: int m_lstyle; int m_pwidth; CPtrArray m_cptArray;
第12页
COLORREF m_color; CPoint m_point;
U INT m_type;
2、其中各个成员变量的代码实现如下: void CZYFdrawView::OnDdot() //点 { // TODO: Add your command handler code here m_type=1; }
void CZYFdrawView::OnDline() //直线 { // TODO: Add your command handler code here m_type=2; }
void CZYFdrawView::OnDrectangle() //矩形 { // TODO: Add your command handler code here m_type=3; }
void CZYFdrawView::OnDellipse() //椭圆 { // TODO: Add your command handler code here m_type=4; }
//颜色
void CZYFdrawView::OnCred() //红色 { // TODO: Add your command handler code here m_color=RGB(255,0,0); }
第13页
void CZYFdrawView::OnCgreen() //绿色 { // TODO: Add your command handler code here m_color=RGB(0,255,0); }
void CZYFdrawView::OnCblue() //蓝色 { // TODO: Add your command handler code here m_color=RGB(0,0,255); }
void CZYFdrawView::OnCyellow() //黄色 { // TODO: Add your command handler code here m_color=RGB(255,255,0); }
void CZYFdrawView::OnCmore() //更多 { // TODO: Add your command handler code here CColorDialog dlg; dlg.m_cc.Flags|=CC_RGBINIT|CC_FULLOPEN;// 弹出对话框 dlg.m_cc.rgbResult=m_color;//记录颜色 if(IDOK==dlg.DoModal()) { m_color=dlg.m_cc.rgbResult; } }
//笔宽
void CZYFdrawView::OnCpslim() //标准 { // TODO: Add your command handler code here m_pwidth=2; }
void CZYFdrawView::OnCpmiddle() //中等
第14页
// TODO: Add your command handler code here m_pwidth=4; }
void CZYFdrawView::OnCpbig() //粗 { // TODO: Add your command handler code here m_pwidth=8; }
void CZYFdrawView::OnCpmore() //更粗 { // TODO: Add your command handler code here m_pwidth=10; }
//线型
void CZYFdrawView::OnLstyle() //实线 { // TODO: Add your command handler code here m_lstyle=0; }
void CZYFdrawView::OnLstyledash() //虚线 { // TODO: Add your command handler code here m_lstyle=1; }
void CZYFdrawView::OnLstyledot() //点线 { // TODO: Add your command handler code here m_lstyle=2; }
3、在OnLButtonDown()中实现记录起点:
void CZYFdrawView::OnLButtonDown(UINT nFlags, CPoint point)
第15页
// TODO: Add your message handler code here and/or call default m_point=point; CView::OnLButtonDown(nFlags, point); }
4、在OnLButtonUp()中实现绘画图形功能的代码如下:
void CZYFdrawView::OnLButtonUp(UINT nFlags, CPoint point) { // TODO: Add your message handler code here and/or call default CClientDC dc(this); CPen pen(m_lstyle,m_pwidth,m_color); dc.SelectObject(&pen);
//空白画刷使图形不覆盖 CBrush* pBrush=CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH)); dc.SelectObject(pBrush); switch(m_type) { case 1: dc.SetPixel(point,m_color); break; case 2: dc.MoveTo(m_point); dc.LineTo(point); break; case 3: dc.Rectangle(CRect(m_point,point)); break; case 4: dc.Ellipse(CRect(m_point,point)); break; } dc.SelectObject(pBrush); dc.SelectObject(&pen); Cdraw *pdraw=new Cdraw(m_type,m_color,m_pwidth,m_lstyle,m_point,point); m_cptArray.Add(pdraw); CView::OnLButtonUp(nFlags, point); }
5、在OnDraw()中实现图形重绘之前要自己重新定义一个新的类”Cdraw ”, 并在类中保存需要保存的变量代码如下:
第16页
Cdraw 类
变量全部设为共有类型的: class Cdraw {
public: int m_lstyle; int m_pwidth; UINT m_type; COLORREF m_color; CPoint m_point; CPoint m_ptEnd; Cdraw(); Cdraw(UINT m_type,COLORREF m_color,int m_pwidth,int m_lstyle,CPoint m_point,CPoint m_ptend); virtual ~Cdraw(); private: };
Cdraw::Cdraw(UINT m_type,COLORREF m_color,int m_pwidth,int m_lstyle,CPoint m_point,CPoint m_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、实现图形重绘:
void CZYFdrawView::OnDraw(CDC* pDC) { CZYFdrawDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); // TODO: add draw code for native data here CBrush* pBrush=CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH)); pDC->SelectObject(pBrush); for(int i=0;i
pen(((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)
{
case 1:
pDC->SetPixel(((Cdraw*)m_cptArray.GetAt(i))->m_ptEnd,((Cdraw*)m_cptArray.GetAt(i))->m_color);
break;
case 2:
pDC->MoveTo(((Cdraw*)m_cptArray.GetAt(i))->m_point);
pDC->LineTo(((Cdraw*)m_cptArray.GetAt(i))->m_ptEnd);
break;
case 3:
pDC->Rectangle(CRect(((Cdraw*)m_cptArray.GetAt(i))->m_point,((Cdraw*)m_cptArray.GetAt(i))->m_ptEnd));
break;
case 4:
pDC->Ellipse(CRect(((Cdraw*)m_cptArray.GetAt(i))->m_point,((Cdraw*)m_cptArray.GetAt(i))->m_ptEnd));
break;
}
pDC->SelectObject(pOldPen);
}
}
第18页
相关文章
- 第10课 画图工具的使用
- 如何使用画图软件
- 湘教版七年级信息技术教案
- 小学信息技术教案画图
- 信息技术兴趣小组活动教案
- 六年级美术教案 1
- 电脑入门教程第9课
- 小学五年级[信息技术]上册全册教案
- 综合实践活动信息技术第二册第一单元教案
- 8.画一幅简单的画 教学过程
第10课 画图工具的使用 教学目标 知识与技能 1.运行"画图"程序 2.初步了解"画图"程序的工具. 3.保存作品 4.关闭"画图"程序 过程与方法 1.认识文件扩展名txt 与 ...
如何使用画图软件 想在电脑上画画吗?很简单,windows已经给你设计了一个简洁好用的画图工具.它在开始菜单的程序项里的附件中,名字就叫做"画图". 启动它后,屏幕右边的这一大块白色就是你的画布了.左边是工具箱,下面是颜 ...
2007年下学期七年级信息技术教学计划 一.学情分析 1.本期我任教七年级的信息技术课,学生大多数来自农村,没接触过电脑的同学占大多数,少部分城镇学生的电脑期操作已较熟练.但有共同的一点是同学们普遍对电脑操作的技能和知识缺少完整的训练,知识 ...
小学二年级电脑教案 画图<涂上美丽的颜色> 一. 教材分析 <涂上美丽的颜色>是画图模块的第二课.在学习本课前,学生已经认识了画图程序,学会了启动和关闭画图,使用矩形.圆角矩形和圆形工具以及"撤消" ...
1. 开机.关机 教学目标:1.让学生初步了解计算机,掌握最基本的开机.关机. 教学重点:关机 教学过程:1.简单的认识主机.显示器.鼠标.键盘 2.教师讲解开机 3.学生尝试开机 4.学习关机:移动鼠标指针到桌面的左下角,单击――关机 5 ...
六年级美术教案 1.远近的奥秘 授课班级:六年级 课业类型:造型•表现 课 时:2课时 教学目的: 1.了解近大远小.近高远低.近宽远窄的透视变化规律. 2.学习.了解视平线和消失点的透视概念. 教学中难点: 重点:通过对周围环境的观察,发 ...
本文由武安六中刘贡献 ppt文档可能在WAP端浏览体验不佳.建议您优先选择TXT,或下载源文件到本机查看. 电脑入门教程 第9章 Windows XP的常用附件 本章导读 学习目标 本章要点 上机练习 习 题 电脑基础实例上机系列丛书 清华 ...
第1课 走进创作乐园 教学目的和要求 1.了解什么是创作: 2.了解如何描述创作以及对创作进行获取.传递.处理的各种技术: 3.知道计算机技术和通信技术是两种重要的创作技术: 4.了解创作高速公路: 教学重点与难点:创作的各种心态及其本质含 ...
综合实践活动信息技术第二册 第一单元 魔力画室 活动1 神奇的魔力画室 教材分析 本教学内容在学生知识结构中,占有重要地位.本节的教学重点是让学生通过研究.讨论的形式掌握一些工具的使用方法. 学习目标 知识目标: 1.学会使用画图软件 2. ...
1.说一说:怎样进入画图程序?并简述操作步骤. 开始------程序------附件-------画图 2 找一找:在.绘图软件,一个暂新的窗口展现在我们眼前,那 么窗口中都是由哪几部分构成的? 3.讲一讲:绘画工具的选择和应用? 4. ...