简易画图软件之大作业报告
用MFC做的一个画图软件,有直线、点、矩形、椭圆、连续线,线型选择、颜色设置
“windows编程”大作业报告
题目: 绘图程序 姓名: 学号: 班级: 任课老师:
日期:2012年5月31日
用MFC做的一个画图软件,有直线、点、矩形、椭圆、连续线,线型选择、颜色设置
1. 系统概述
本软件是利用VC++这个强大的可视化编程工具开发的。软件主要功能包括图形的绘制、线型的设置、颜色的设置,图形文件的重绘和保存等功能。本软件具有实用性、稳定性、易用性,和可维护性的特点,应该说它应是一个开放性的软件,用户可以根据需要对其功能进行扩充、晚上与修改,是其符合自己的要求。总之。本软件是一个逐步晚上的软件。
2. 程序功能及操作说明
(1)画点的实现:在编辑菜单里选择绘制菜单—>点
(2)画直线的实现:选择画笔样式(线型)->选择画板(颜色)->点击编辑菜单上的直线选项
用MFC做的一个画图软件,有直线、点、矩形、椭圆、连续线,线型选择、颜色设置
(3)矩形的实现:选择画笔样式(线型)->选择画板(颜色)->点击编辑菜单上的矩形选项
(4)椭圆的实现:选择画笔样式(线型)->选择画板(颜色)->点击编辑菜单上的椭圆选项
用MFC做的一个画图软件,有直线、点、矩形、椭圆、连续线,线型选择、颜色设置
(5)连续线的实现:选择画笔样式(线型)->选择画板(颜色)->点击编辑菜单上的连续线选项
(6)坐标的实现:在可编辑区域内显示鼠标所在的位置
3.程序结构分析
用MFC做的一个画图软件,有直线、点、矩形、椭圆、连续线,线型选择、颜色设置
首先,新建一个单文档类型的MFC AppWizard(exe)工程,工程取名为:Graphic。为次程序添加一个子菜单,菜单名称为“绘图”,并为其添加五个菜单项,分别用来控制不同图形的绘制。当用户选择其中的一个菜单项后,程序将按照当前的选择进行和相应图形的绘制。添加的五个菜单项的ID及名称如表1所示。然后分别为这五个菜单项添加命令响应,本程序让视图(CCGraphic View)对这些菜单命令进行响应,这五个响应函数的名称分别如表1所示。
表格 1 添加的菜单项
以便随后的绘图操作使用。因此在CCGraphicView类中添加私有变量m_nDrawType;用来保存用户的选择,该变量的定义如下所述: private int m_nDrawType;
接着,在视类的够着函数中将此变量初始化为0,程序代码如下: CGraphicView::CGaphicView() {
//TODO:add construction code here M_nDrawType=0; }
用MFC做的一个画图软件,有直线、点、矩形、椭圆、连续线,线型选择、颜色设置
利用switch/case语句,来分别完成相应图形的绘制。当用户选择【绘图】菜单下的不同子菜单项时,将变量m_nDrawType设置为不同的值。程序代码如下:
void CGraphicView::OnDot() {
// TODO: Add your command handler code here m_nDrawType=1; }
void CGraphicView::OnLine() {
// TODO: Add your command handler code here m_nDrawType=2; }
void CGraphicView::OnRectangle() {
// TODO: Add your command handler code here m_nDrawType=3; }
void CGraphicView::OnEllipse() {
// TODO: Add your command handler code here m_nDrawType=4; }
void CGraphicView::OnLianxuxian(UINT nFlags, CPoint point) {
// TODO: Add your command handler code here m_nDrawType=5; }
对于直线、矩形和椭圆,在绘制时都可有两点来确定其图形。当鼠标左击时得到一个点,当鼠标左键松开时得到另外一个点。为视类CGraphicView分别捕捉鼠标左键按下和弹起这两个消息。另外当鼠标左键按下时,需要将鼠标当前按下点保存,因此我们为CGraphicView再增加一个CPoint类型的私有成员变量:m_ptOrigin,在视类的构造函数中将此变量初始化为0.在鼠标按下消息响应函数中,保存该点,代码如下:
void CGraphicView::OnLButtonDown(UINT nFlags, CPoint point) {
// TODO: Add your message handler code here and/or call default CMainFrame* pMainFrame = (CMainFrame*)GetParent(); pMainFrame->m_wndStatusBar.SetPaneText(1, "按下左键"); m_bDraw=true;
m_ptOrigin=point; //保存鼠标按下得到点,也是绘制一个点 m_ptFrom=point; m_ptTo=point;
用MFC做的一个画图软件,有直线、点、矩形、椭圆、连续线,线型选择、颜色设置
CView::OnLButtonDown(nFlags, point);
}
在鼠标左键弹起消息响应函数中实现绘图,到吗如下:
void CGraphicView::OnLButtonUp(UINT nFlags, CPoint point) {
// TODO: Add your message handler code here and/or call default CMainFrame* pMainFrame = (CMainFrame*)GetParent(); pMainFrame->m_wndStatusBar.SetPaneText(1, "放开左键"); m_bDraw=false;
CClientDC dc(this); CPen *pOldPen;
CPen NewPen(penStyle, 1, m_clr); pOldPen=dc.SelectObject (&NewPen);
//dc.SetBkMode(TRANSPARENT); //OPAQUE:背景在绘制之前用当前背景色填充
//TRANSPARENT:背景在绘图前不改变 switch(m_nDrawType) {
case 1:
dc.SetPixel(point,m_clr); //绘制点 break; case 2: {
CClientDC dc(this);
CPen pen(penStyle,1,m_clr);
CPen *pOldpen = dc.SelectObject(&pen);
dc.MoveTo(m_ptOrigin); //调用MoveTo函数移动到原点 dc.LineTo(point); //调用LineTo函数绘制到终点 break; }
case 3:
dc.Rectangle(CRect(m_ptOrigin,point)); break; case 4:
dc.Ellipse(CRect(m_ptOrigin,point)); break; }
CView::OnLButtonUp(nFlags, point); }
4.系统设计难点及解决办法
(1)起初不知道用什么消息函数绘制图形,OnDraw()函数是直接绘制的,不能满足自己软件的设计需要。
用MFC做的一个画图软件,有直线、点、矩形、椭圆、连续线,线型选择、颜色设置
解决方法:通过不断的思考和讨论,以及汲取些前人的经验,采用switch/case的方式获取将要使用的工具型号,再借助于OnLButtonDown()函数和OnLButtonUp()函数获取鼠标的位置,绘制图形。 (2)不知道如何制作选择颜色的画板
解决方法:通过上网查找消息,可以通过软件本身自带的颜色对话框来显示,再编辑些代码将所需要的画板功能实现出来。
5.总结
…… 此处隐藏:1693字,全部文档内容请下载后查看。喜欢就下载吧 ……
相关推荐:
- [教学研究]2012西拉科学校团少队工作总结
- [教学研究]建筑工程公司档案管理制度
- [教学研究]小学数学人教版六年级上册圆的周长和面
- [教学研究]ERP电子行业解决方案
- [教学研究]钢支撑租赁合同范本
- [教学研究]预应力自动张拉系统用户手册Rev1.0
- [教学研究]MOOC课程:金瓶梅人物写真(每章节课后
- [教学研究]追加被执行人申请书(适用追加夫妻关系)
- [教学研究]2014年驾考科目一考试最新题库766
- [教学研究]2013-2014学年度九年级物理第15章《电
- [教学研究]新版中日交流标准日本语初级下26课-客
- [教学研究]小导管注浆施工作业指导书
- [教学研究]一般财务人员能力及人岗匹配评估表
- [教学研究]打1.2.页 小学一年级暑假口算100以内加
- [教学研究]学习贯彻《中国共产党党和国家机关基层
- [教学研究]2012年呼和浩特市中考试卷_35412
- [教学研究]最简易的电线电缆购销合同范本
- [教学研究]如何开展安全标准化建设
- [教学研究]工作分析与人岗匹配
- [教学研究]2016-2017学年高中历史第七单元现代中
- 山东省义务教育必修地方课程小学三年级
- 台湾宜兰大学互联网交换技术课程 01_In
- 思想品德:第一课《我知我家》课件(人
- SAR合成孔径雷达图像点目标仿真报告(附
- 利辛县“十三五”规划研究报告
- 2015-2020年中国手机APP行业市场发展趋
- 广告策略、创意表现、媒体方案
- 企业如何申请专利的的几点思考
- 《中国教育简史》网上作业
- 高中历史第二单元西方人文精神的起源及
- 年终晚会必备_精彩的主持稿_精心整理_
- 信息工程专业自荐书
- 2019高考历史人教版一轮练习:第十二单
- JAVA俱乐部管理系统软件需求规格说明书
- 2016-2021年中国小型板料折弯机行业市
- (人教新课标)六上_比的基本性质课件PPT
- 辽宁省公务员考试网申论备考技巧:名言
- 神经阻滞麻醉知情同意书
- 施工企业信息填报、审核和发布的相关事
- 初一(七年级)英语完形填空100篇




