简单图形绘制系统设计方案
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
简单图形绘制系统设计方案第一章课题背景
引言
计算机技术的发展,使人类社会进入了信息化和自动化,计算机智能识别也随着计算机的发展得到了迅速的发展。特别是图形图像的计算机处理技术更是有了前所未有的进步和应用。计算机识别也逐渐的从图形图像处理的大环境下分离出来作为一门新的高科技研究领域出现。画图涉及到的学科很多,包括数字信号处理、工程数学、信息论、运筹学等,它与计算机、自动化、生物学、视觉心理和生理学、人工智能、智能信息处理等众多领域交叉、综合集成,有广泛的应用。该软件功能与 Windows 下附件中的画图软件有相似功能。本程序是在 VC6.0 平台上用 MFC 所编。绘制方面的功能主要包括绘制各种图元,包括直线、矩形、椭圆,用笔或画刷自由绘图。绘图时可以选择各种颜色,各种线型和线宽。该软件设计的设计思想是面向对象程序设计的思想。面向对象技术是一个非常实用而强有力的软件开发方法。它具有许多特色。一是方法的唯一性,即方法是对软件开发过程所有阶段进行综合考虑而得到的。二是从生存期的一个阶段到下一个阶段的高度连续性,即在一个阶段所用到的部分与在下一个阶段所使用的部分是衔接的,所使用的技术经过生存期每一阶段后不改变。三是把面向对象分析(OOA)、面向对象设计(OOD)和面向对象程序设计(OOP)集成到生存期的相应阶段。笔者作为一个初学者,所学知识有限,做这个软件主要是为了测试近期的学习成果,方便了解对MFC的学习掌握程度,以便于后期的学习。该程序中基本上包含了笔者这一段时间在VC上付出的所有努力。软件又MFC 单文档类工程为主要载体,其中菜单、对话框的创建以及各种消息的响应,MFC库函数的调用等,其创建过程能看出一个初学者由浅入深的过程。软件的预期是能成为一个电脑绘图的辅助功能存在,可是软件完成后绘图功能上依然有许多方面不能满足需求。希望读者提出宝贵的意见和建议。
第二章设计简介及设计方案论述
2.1 设计目的
培养学生对科学研究的认识,掌握基本的科研方法;培养学生分析问题、研究问题和解决问题的能力;培养学生动手能力和编程能力以及自主查阅资料的能力。2.2 设计思路
2.2.1 题设要求
完成简单图形的绘制系统:
实现直线,矩形,圆的绘制,并能设置线型,线宽和颜色;实现图形的重绘和保存功能;实现在状态栏动态显示当前时间功能。
2.2.2 题目分析
题目要求设计一个简单的绘图系统,程序功能要求简单,可以用一个简单的窗口菜单程序解决。对题目要求的绘制图形和线条更改,使用菜单响应会很容易解决,至于图形的重绘和保存,状态栏的时间显示虽然使用的函数较为复杂,看似麻烦,实际上函数框架简化出来后很容易理解,响应功能的代码量也相对较少。
2.3 设计原理
我创建的是一个单文档类的MFC AppWizard(exe)工程(图2-1,图2-2),在该工程里,我使用菜单(图2-3,图2-4)和对话框(图2-5)实现了题目要求的简单绘图设计。
图2-1 创建MFC应用程序
图2-2 创建单文档类MFC工程
图2-3 双击IDR_MAINFRAME创建菜单
图2-4 建立如图菜单项
图2-5 建立如图所示对话框
第三章详细设计
3.1 菜单的响应
3.1.1 菜单的创建
首先建立一个但文档类型的MFC AppWizard(exe)工程,工程名为:简单绘图演
示(图2-1,图2-2),然后打开资源视图,找到“菜单”-“IDR_MAINFRAME”,双击“IDR_MAINFRAME”创建菜单(见图2-3 图2-4)。建立的菜单如图4所示。
3.1.2 菜单的响应
菜单建好后,要为所建立的菜单添加消息响应函数,这样所建立的菜单才能被加载
入程序(斜体部分为添加的消息响应函数,图3-1)。
例3-1 void C简单绘图演示View::OnLine()
{ // TODO: 在此添加命令处理程序代码
}
void C简单绘图演示View::OnCircle()
{
// TODO: 在此添加命令处理程序代码
}
void C简单绘图演示View::OnRect()
{
// TODO: 在此添加命令处理程序代码
}
图3-1 在类向导中响应创建的菜单项
(响应项ID:ID_CIRCLE、ID_LINE、ID_RECT;分别对应圆、直线、矩形)
接着,为C简单绘图演示View添加私有成员变量m_nDrawStyle(图3-2是具体的添加
成员变量操作),并将m_nDrawStyle初始化为0(斜体为m_nDrawStyle初始化过程)。
例3-2 C简单绘图演示View::C简单绘图演示View()
: m_nDrawStyle(0)
{
// TODO: 在此处添加构造代码
m_nDrawStyle=0;
}
图3-2 为C简单绘图演示View添加UINT类型的私有成员变量m_nDrawStyle
m_nDrawStyle变量初始化后再为响应函数赋值(斜体为赋值过程)
例3-3 void C简单绘图演示View::OnLine()
{ // TODO: 在此添加命令处理程序代码
m_nDrawStyle=0;
}
void C简单绘图演示View::OnCircle()
{ // TODO: 在此添加命令处理程序代码
m_nDrawStyle=1;
}
void C简单绘图演示View::OnRect()
{ // TODO: 在此添加命令处理程序代码
m_nDrawStyle=2;
}
赋值完成后,即要开始让程序绘图了,谈到绘图自然就想到了绘图的必要工具——画笔
和画刷,当然,当我们调用绘图函数的时候其实系统已经提供了一个默认的画笔很画刷。
如果要自定义更改画笔和画刷的颜色,类型就需要另外调用申明了。现在先使用默认工
具响应图像的绘制,自定义画笔画刷后面会讲到。
对于直线、矩形和圆,在绘图是都可以由2个点来确定其图形。当鼠标左键按下时
得到一个点,当鼠标左键松开时又会得到一个点。也就是说,在鼠标左键按下时将当前
点保存为绘图原点,当鼠标左键松开时,就可以绘图了。因此就需要为视类(C简单绘
图演示View)分别捕获鼠标左键按下和左键松开这两个消息。另外,当鼠标左键按下时,
需要将鼠标当前按下点保存起来,因此为C简单绘图演示View类再增加一个CPoint类
型的私有成员变量:m_ptOrigin。并在C简单绘图演示View类构造函数中,将该变量
的值设置为0,即将原点设置为(0,0)。
然后,在鼠标左键按下消息响应函数中,保存当前点,代码如例3-4(斜体)。
例3-4 void C简单绘图演示View::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
m_ptOrigin=point;
CView::OnLButtonDown(nFlags, point);
}
在鼠标左键松开消息响应函数中实现绘图功能,具体代码如例3-5(斜体)。
例3-5 void C简单绘图演示View::OnLButtonUp(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
CClientDC dc(this);