c++简单绘图板(共15页).doc

上传人:飞****2 文档编号:13939399 上传时间:2022-05-02 格式:DOC 页数:15 大小:80KB
返回 下载 相关 举报
c++简单绘图板(共15页).doc_第1页
第1页 / 共15页
c++简单绘图板(共15页).doc_第2页
第2页 / 共15页
点击查看更多>>
资源描述

《c++简单绘图板(共15页).doc》由会员分享,可在线阅读,更多相关《c++简单绘图板(共15页).doc(15页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、精选优质文档-倾情为你奉上课程设计报告课程设计题目:简单绘图板 学生姓名 :余勇 专 业:数字媒体技术班 级:指导教师 :李祥 2013年 01 月 12 日东华理工大学VC+课程设计设计目的: (1)要求学生达到熟练掌握C+语言的基本知识和技能; (2)基本掌握面向对象程序设计的基本思路和方法; (3)能够利用所学的基本知识和技能,解决简单的面向对象程序设计问题。 设计要求:(1)要求利用面向对象的方法以及C+的编程思想来完成系统的系统结构; (2)要求在设计的过程中,建立清晰的UML类关系图,描述出类族之间的关系; (3)在系统中定义的每个类中要有各自的属性和方法; (4)在系统的设计中,

2、要用到面向对象的封装、继承和派生、多态的属性。 设计选题:简单绘图板要求:(1)程序中包含菜单项和工具栏;(2)先选择菜单项或单击工具栏上的命令按钮,然后在窗体空白区域单击鼠标后,绘制相应菜单项或命令按钮指定的图形、文字。设计思路:问题分析:绘图板需要创建一个用户界面,然后用户界面中需要有菜单栏和工具栏进行不同的操作选择。 在菜单栏中能指定不同的基本图形进行绘制。设计一个单文档类型的MFC AppWizard (exe)工程,工程取名为:绘图板。此程序将实现简单的绘图功能,包括点、直线、矩形、椭圆、扇形和连续线的绘制。并且能实现绘图的控制,包括线宽、线型和颜色的设置,图形的保存和打开简单绘图板

3、设计图: 绘图文件点打开直线保存矩形椭圆连续线结构分析:首先,新建一个单文档类型的MFC AppWizard (exe)工程,工程取名为:Graphic。为此程序添加一个子菜单,菜单名称为“绘图”,并为其添加六个菜单项,分别用来控制不同图形的绘制。当用户选择其中的一个菜单项后,程序将按照当前的选择进行相应图形的绘制。添加的六个菜单项的ID。然后分别为这六个菜单项添加命令响应,本程序让视类(CGraphicView)对这些菜单命令进行响应,在程序运行以后,当用户单击某个菜单项时,应该把用户的选择保存起来,以便随后的绘图操作使用。因此在CMyView类中添加一个私有变量DrawType;用来保存用

4、户的选择,该变量的定义如下所述:private: UINT DrawType;在程序运行以后,当用户单击某个菜单项时,应该把用户的选择保存起来,以便随后的绘图操作使用。因此在CGraphicView类中添加一个私有变量m_nDrawType;用来保存用户的选择,该变量的定义如下所述:private: UINT m_nDrawType;接着,在视类的构造函数中将此变量初始化为0,程序代码如下:CGraphicView:CGraphicView()/ TODO: add construction code here m_nDrawType=0;然后利用switch/case语句,来分别完成相应图形

5、的绘制。当用户选择【绘图】菜单下的不同子菜单项时,将变量DrawType设置为不同的值。void CGraphicView:OnDot() / TODO: Add your command handler code herem_nDrawType=1;void CGraphicView:OnLine() / TODO: Add your command handler code herem_nDrawType=2;void CGraphicView:OnRectangle() / TODO: Add your command handler code herem_nDrawType=3;voi

6、d CGraphicView:OnEllipse() / TODO: Add your command handler code herem_nDrawType=4;void CGraphicView:OnLianxuxian() / TODO: Add your command handler code herem_nDrawType=5;对于直线、矩形和椭圆,在绘制时都可有两点来确定其图形。当鼠标左击时得到一个点,当鼠标左键松开时得到另外一个点。为视类CGraphicView分别捕获鼠标左键按下和弹起这两个消息。另外当鼠标左键按下时,需要将鼠标当前按下点保存,因此我们为CGraphicVi

7、ew再增加一个CPoint类型的私有成员变量:m_ptOrigin,在视类的构造函数中将此变量初始化为0。在鼠标按下消息响应函数中,保存该点,代码如下:void CGraphicView:OnLButtonDown(UINT nFlags, CPoint point) / TODO: Add your message handler code here and/or call defaultm_ptOrigin=point; /保存鼠标按下得到点,也是绘制一个点CView:OnLButtonDown(nFlags, point);在鼠标左键弹起消息响应函数中实现绘图,代码如下:void CGr

8、aphicView:OnLButtonUp(UINT nFlags, CPoint point) / TODO: Add your message handler code here and/or call default/创建并获得设备描述CClientDC dc(this); switch (m_nDrawType)case 1:dc.SetPixel(point,RGB(0,255,0)); /*绘制点*/break;case 2: /*绘制直线*/dc.MoveTo(m_ptOrigin);/*调用MoveTo函数移动到原点*/dc.LineTo(point);/*调用LineTo函数

9、绘制到终点。*/break;case 3: /*绘制矩形*/ dc.Rectangle(CRect(m_ptOrigin,point);break;case 4: /*绘制椭圆*/dc.Ellipse(CRect(m_ptOrigin,point);break;CView:OnLButtonUp(nFlags, point);在上述程序中,设置一个点,用到的函数是SetPixel,这也是CDC类的一个成员方法,该函数的生命形式如下:COLORREF SetPixel (POINT point,COLORREF crColor);该函数是在指定的点设置一个像素。其中第一个参数(point)是指定

10、的点,第二个参数(crColor)是指定的颜色。在程序中设定的颜色在系统颜色表中可能不存在,但系统会选择一种和这个颜色最接近的颜色。RGB是一个宏,它有三个参数,分别代表红、绿、蓝三种颜色的值。这三个参数BYTE类型,取值范围为0255。RGB(0,0,0)是黑色,RGB(255,255,255)是白色,将这三个分量设置成为0255之间的任意值,从而得到各种不同的颜色。Windows系统为我们提供了一个画图程序,在该程序中,利用画笔可以绘制连续的线条,绘制连续的线条,首先要得到线条的起点,然后需要捕获鼠标移动过程中的每一个点,这可以通过捕获鼠标移动消息(WM_MOUSEMOVE)来实现。在此消

11、息响应函数中,在依次捕获的各个点之间绘制一条条非常短的线段,从而就可以绘制出一条连续的线条。于是,我增加了一个鼠标移动消息(WM_MOUSEMOVE)的响应函数(OnMouseMove)。这样,只要鼠标在应用程序窗口中移动时都会进入到这个消息响应函数中。然后我为CMyview添加一个BOOL型的私有变量Draw,当鼠标左键按下去时,此变量为真;当鼠标左键弹起时,此变量为假。主题程序代码 / 绘图板View.cpp : implementation of the CMyView class/#include stdafx.h#include 绘图板.h#include 绘图板Doc.h#incl

12、ude 绘图板View.h#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE = _FILE_;#endif/ CMyViewIMPLEMENT_DYNCREATE(CMyView, CView)BEGIN_MESSAGE_MAP(CMyView, CView)/AFX_MSG_MAP(CMyView)ON_COMMAND(ID_LINE, OnLine)ON_COMMAND(ID_LIANXUXIAN, OnLianxuxian)ON_COMMAND(ID_DOT, OnDot)ON_COMMAND(

13、ID_RECGANGLE, OnRecgangle)ON_WM_LBUTTONDOWN()ON_WM_LBUTTONUP()ON_WM_MOUSEMOVE()ON_COMMAND(ID_CIRCLE, OnCircle)ON_COMMAND(ID_COLOR, OnColor)/AFX_MSG_MAP/ Standard printing commandsON_COMMAND(ID_FILE_PRINT, CView:OnFilePrint)ON_COMMAND(ID_FILE_PRINT_DIRECT, CView:OnFilePrint)ON_COMMAND(ID_FILE_PRINT_P

14、REVIEW, CView:OnFilePrintPreview)END_MESSAGE_MAP()/ CMyView construction/destructionCMyView:CMyView()/ TODO: add construction code hereDrawType=0;savepoint=0; Draw=FALSE;m_color=(255,0,0);CMyView:CMyView()BOOL CMyView:PreCreateWindow(CREATESTRUCT& cs)/ TODO: Modify the Window class or styles here by

15、 modifying/ the CREATESTRUCT csreturn CView:PreCreateWindow(cs);/ CMyView drawingvoid CMyView:OnDraw(CDC* pDC)CMyDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);/ TODO: add draw code for native data here/ CMyView printingBOOL CMyView:OnPreparePrinting(CPrintInfo* pInfo)/ default preparationreturn DoPre

16、parePrinting(pInfo);void CMyView:OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)/ TODO: add extra initialization before printingvoid CMyView:OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)/ TODO: add cleanup after printing/ CMyView diagnostics#ifdef _DEBUGvoid CMyView:AssertValid() constCVie

17、w:AssertValid();void CMyView:Dump(CDumpContext& dc) constCView:Dump(dc);CMyDoc* CMyView:GetDocument() / non-debug version is inlineASSERT(m_pDocument-IsKindOf(RUNTIME_CLASS(CMyDoc);return (CMyDoc*)m_pDocument;#endif /_DEBUG/ CMyView message handlersvoid CMyView:OnLButtonDown(UINT nFlags, CPoint poin

18、t) / TODO: Add your message handler code here and/or call defaultsavepoint=point;Draw=TRUE;CView:OnLButtonDown(nFlags, point);void CMyView:OnLButtonUp(UINT nFlags, CPoint point) / TODO: Add your message handler code here and/or call defaultCView:OnLButtonUp(nFlags, point);CClientDC dc(this);switch (

19、DrawType)/绘制椭圆case 1:dc.Ellipse(CRect(savepoint,point);break;/绘制点case 2:dc.SetPixel(point,m_color);break;/绘制直线case 3:if(Draw=true)dc.MoveTo(savepoint);dc.LineTo(point);savepoint=point;break;/绘制矩形case 4:dc.Rectangle(CRect(savepoint,point);break;Draw=FALSE;void CMyView:OnMouseMove(UINT nFlags, CPoint

20、point) / TODO: Add your message handler code here and/or call defaultCView:OnMouseMove(nFlags, point);/创建并获得描述 CClientDC dc(this);switch (DrawType)/绘制连续线case 5:CPen pen1;CPen *oldPen;pen1.CreatePen(PS_SOLID,2,m_color); CPen *Oldpen=dc.SelectObject(&pen1);if(Draw=true)dc.MoveTo(savepoint); dc.LineTo(

21、point);/修改线段的起点 savepoint=point;/恢复描述dc.SelectObject(Oldpen);break;void CMyView:OnCircle() / TODO: Add your command handler code hereDrawType=1;void CMyView:OnDot() / TODO: Add your command handler code hereDrawType=2;void CMyView:OnLine() / TODO: Add your command handler code hereDrawType=3;void CM

22、yView:OnRecgangle() / TODO: Add your command handler code hereDrawType=4;void CMyView:OnLianxuxian() / TODO: Add your command handler code hereDrawType=5;实验心得: 这次课程设计我成功的完成了。通过本次课程设计,我完成了用移动鼠标对直线,矩形,椭圆、连续线的简单绘制工具的的制作,其中完成了绘图形状的选择。 基于平时课外上机实验的练习,对菜单的创建,COMMAND消息处理函数和 UPDATE_COMMAND_UI消息函数的添加过程比较熟练,这部

23、分还算简单。难的是代码的添加,对绘制图形的程序有大概的思路,但具体编写时变量的运用以及函数的调用设置。这次实验中关键就是确定画图起点及终点坐标,因为是用鼠标绘制图形,所以需用函数来捕获鼠标当前所在位置的坐标,因此我设置了OnLButtonDown()函数来捕获起点坐标,OnMouseMove()函数来捕获鼠标移动是的当前位置坐标,OnLButtonUp()函数来捕获终点坐标。而绘制图形使用的函数是OnPaint(),将图形的起点和终点坐标和鼠标的位置坐标相联系后就能用鼠标来绘制图形了,所以在它们之间用opoint和cpoint两变量实现链接。另外我觉得将绘图语句集中在OnPaint()函数中,

24、然后其他函数来调用OnPaint()函数,这样不容易引起混乱,同时程序更简单,更有条理,便于修改。这次课程设计虽只是做了一个极其简单的绘图工具的制作,但也让我从设计者的角度看到了设计程序以及电脑软件工具的实质及难度,看似一个很简单的工具,其制作的背后工作是很大的,不光是图标,按钮的设置,程序的编写,代码的实现都是很精密且不容许一点错误的工作。平时我们使用的很顺手的一个小小工具,其开发的各项小号都不可小觑,由此,我们需要学的东西还太多太多。课程设计评分表学生姓名:余勇 班级: 学号:2课程设计题目: 绘图板 项目内容满分实 评选题能结合所学课程知识、有一定的能力训练。符合选题要求(5人一题)10

25、工作量适中,难易度合理10能力水平能熟练应用所学知识,有一定查阅文献及运用文献资料能力10理论依据充分,数据准确,公式推导正确10能应用计算机软件进行编程、资料搜集录入、加工、排版、制图等10能体现创造性思维,或有独特见解10成果质量总体设计正确、合理,各项技术指标符合要求。10说明书综述简练完整,概念清楚、立论正确、技术用语准确、结论严谨合理;分析处理科学、条理分明、语言流畅、结构严谨、版面清晰10设计说明书栏目齐全、合理,符号统一、编号齐全。格式、绘图、表格、插图等规范准确,符合国家标准10有一定篇幅,字符数不少于500010总 分100指导教师评语: 指导教师签名: 年 月 日专心-专注-专业

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com