已阅读5页,还剩47页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
简单图形绘制系统设计方案第一章 课题背景引言 计算机技术的发展,使人类社会进入了信息化和自动化,计算机智能识别也随 着计算机的发展得到了迅速的发展。特别是图形图像的计算机处理技术更是有了前 所未有的进步和应用。计算机识别也逐渐的从图形图像处理的大环境下分离出来作 为一门新的高科技研究领域出现。画图涉及到的学科很多,包括数字信号处理、工 程数学、信息论、运筹学等,它与计算机、自动化、生物学、视觉心理和生理学、 人工智能、智能信息处理等众多领域交叉、综合集成,有广泛的应用。 该软件功能与 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_nDrawStylem_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);switch (m_nDrawStyle)case 1:dc.Ellipse(CRect(m_ptOrigin,point);break;case 2:dc.Rectangle(CRect(m_ptOrigin,point);break;case 0:dc.MoveTo(m_ptOrigin);dc.LineTo(point);break;CView:OnLButtonUp(nFlags, point); 好了,绘图响应函数完成了,试运行看看程序是否能完成绘图操作。为了进行绘图,首先需要有DC对象,例3-5所示代码中首先定义了一个CClientDC类型的变量:dc。然后将已经保存在变量m_nDrawStyle的用户选择调用出来,选择switch/case语句来分别完成绘图,完成用户的不同选择。程序运行结果(图3-3):图3-3 简单绘图程序运行显示从运行结果图中可以发现该程序绘制的图形都是黑色的,而且图形中绘制的圆也不是圆,而是一个椭圆,当一个图形在另一个图形上绘制的时候会将之前的图形覆盖掉。为了有效的解决程序中发现的问题,我们一个一个分析:1、 图形显示为黑色,是因为系统默认的画笔和画刷都是黑色的,要想程序输出不用的颜色,这就需要为程序重新申明一支画笔和画刷;2、 绘制的圆是椭圆的原因是因为我们调用的是椭圆的绘制函数,在几何上,圆是椭圆的特殊形态,当椭圆的长轴和短轴相等时,椭圆就成了一个圆,换句话说就是当椭圆的外接矩形是一个正方形时,这是的椭圆就是圆,而椭圆的绘制函数就是通过外接矩形的左上角坐标和右下角坐标来绘制的,所以在获取椭圆的参数时,只要将左上角和右下角两个坐标的x,y的差取等即可;3、 图形会被覆盖是因为程序默认的画刷类型是一个白画刷,若是想看到图形里面的内容,只需要将画刷类型改为透明即可。程序更改如例3-6(斜体,粗体部分为修改后的内容) 例3-6 void C简单绘图演示View:OnLButtonUp(UINT nFlags, CPoint point)/ TODO: 在此添加消息处理程序代码和/或调用默认值CClientDC dc(this);CPen pen(PS_SOLID,1,RGB(255,0,0);dc.SelectObject(&pen);CBrush *pBrush=CBrush:FromHandle(HBRUSH)GetStockObject(NULL_BRUSH);dc.SelectObject(pBrush);switch (m_nDrawStyle)case 1:dc.Ellipse(m_ptOrigin.x,m_ptOrigin.y,point.x,m_ptOrigin.y+point.x-m_ptOrigin.x);break;case 2:dc.Rectangle(CRect(m_ptOrigin,point);break;case 0:dc.MoveTo(m_ptOrigin);dc.LineTo(point);break;CView:OnLButtonUp(nFlags, point); 运行结果(图3-4):图3-4 修改后程序运行结果图从图中可以看到之前的问题已经被解决了。3.2 设置对话框基本绘图功能已经实现,现在给“简单绘图演示”程序加上其他功能线宽、线型和颜色按钮设置。(对话框建立 如第二章图2-5)对话框建好后,为此对话框建立一个响应的对话框类。图3-5 为对话框建立相应的对话框类响应对话框,创建一个响应消息(如例3-7 斜体部分)。 例3-7 void C简单绘图演示View:OnSetting()/ TODO: 在此添加命令处理程序代码CSettingDlg dlg;dlg.m_nLineWidth=m_nLineWidth;dlg.m_nLineStyle=m_nLineStyle;if(IDOK=dlg.DoModal()m_nLineWidth=dlg.m_nLineWidth;m_nLineStyle=dlg.m_nLineStyle; 响应消息是应该注意添加头文件#include “SettingDlg.h”。其中m_nLineWidth和m_nLineStyle变量的申明见图3-6。申明后在C简单绘图演示View和SettingDlgView中初始化为0。图3-6 为编辑框和单选框添加变量得到线宽和线型的变量后,在例3-7中已经保存赋值,接着就要使用了,线宽线型都是对画笔的变量,自然使用在画笔函数中,先前定义的画笔CPen pen(PS_SOLID,1,RGB(255,0,0);其中三个参数分别对应线型线宽和颜色,将线型和线宽参数用变量m_nLineStyle和m_nLineWidth代替即可实现对画笔线型和线宽的更改,更改如下: 例3-8 CPen pen(m_nLineStyle,m_nLineWidth,RGB(255,0,0); 更改后运行结果如图3-7.图3-7 线型线宽实现后的运行结果3.3 颜色对话框在先前对话框建立的时候,可以看到一个“颜色选择”按钮,该按钮是对画笔颜色进行自定义的控件。MFC为我们提供了一个类:CColorDialog,可以很方便地创建颜色对话框。在SettingDlgView响应按钮“颜色选择”: 例3-9 void CSettingDlg:OnClickedColor()/ TODO: 在此添加控件通知处理程序代码CColorDialog dlg;dlg.m_cc.Flags |=CC_RGBINIT | CC_FULLOPEN;dlg.m_cc.rgbResult=m_clr;if(IDOK=dlg.DoModal()m_clr=dlg.m_cc.rgbResult; 其中m_clr是一个COLORREF类型的变量,该变量在SettingDlg.h中申明,是一个public成员。然后在C简单绘图演示View响应OnSetting消息中添加如下粗体代码: 例3-10 void C简单绘图演示View:OnSetting()/ TODO: 在此添加命令处理程序代码CSettingDlg dlg;dlg.m_nLineWidth=m_nLineWidth;dlg.m_nLineStyle=m_nLineStyle;dlg.m_clr=clr;if(IDOK=dlg.DoModal()m_nLineWidth=dlg.m_nLineWidth;m_nLineStyle=dlg.m_nLineStyle;clr=dlg.m_clr; 其中clr是在C简单绘图演示View.h中定义的COLORREF类型的private成员变量。做完这些后,再次更改画笔参数中的颜色参数,更改如下:CPen pen(m_nLineStyle,m_nLineWidth,clr);响应后运行结果如图3-8:图3-8 颜色对话框改变画笔颜色3.4 状态栏时间设置通过第三章的前三节,我们已经创建了一个可以绘制圆、矩形和直线的简单绘图程序,该程序已经能够实现对,下面我们来扩展下程序对系统时间的响应。首先增加一个名为时钟的字符串资源,创建方式:双击String Table文件夹下的String Table项,打开C简单绘图演示程序的字符串资源,在其中添加一个“ID:IDS_TIMER;Caption:时钟”的字符串资源。然后在CMainFrame类源文件的前部定义: 例3-11 static UINT indicators =ID_SEPARATOR, / 状态行指示器IDS_TIMER,ID_INDICATOR_CAPS,ID_INDICATOR_NUM,ID_INDICATOR_SCRL,; 为了在状态栏上显示时间的静态文本,在程序的CMainFrame类的OnCreate函数的后部,但要在其return语句前添加例3-12所示代码。 例3-12 CTime t=CTime:GetCurrentTime();CString str=t.Format(%H:%M:%S);CClientDC dc(this);CSize sz=dc.GetTextExtent(str);int index=0;index=m_wndStatusBar.CommandToIndex(IDS_TIMER);m_wndStatusBar.SetPaneInfo(index,IDS_TIMER,SBPS_NORMAL,sz.cx);m_wndStatusBar.SetPaneText(index,str);SetTimer(1,1000,NULL); 其中SetTimer()是一个定时器,起功能是1000毫秒触发一次定时器消息,加粗部分功能是获取输出文本显示是占据的宽度,然后直接用这个宽度去修改窗格的宽度。此时我们已经获得了当前的系统时间,但是这个时间是静止的,我们要想它实时的显示系统当前的时间,就必须让这个时间“动起来”。我们已经设置了一个定时器,没一秒发送一次WM_TIMER定时器消息,那么我们就可以在该定时器消息响应函数中再次获得系统当前时间,并设置状态栏窗格的文本。加入代码如例3-13。 例3-13 void CMainFrame:OnTimer(UINT_PTR nIDEvent)/ TODO: 在此添加消息处理程序代码和/或调用默认值CTime t=CTime:GetCurrentTime();CString str=t.Format(%H:%M:%S);CClientDC dc(this);CSize sz=dc.GetTextExtent(str);m_wndStatusBar.SetPaneInfo(1,IDS_TIMER,SBPS_NORMAL,sz.cx);m_wndStatusBar.SetPaneText(1,str);CFrameWndEx:OnTimer(nIDEvent); 此时运行程序可以看到状态栏中的时间已经“动起来”了。3.5图形的保存和重绘程序运行后似乎没什么问题了,可是当我们放大或缩小窗口时,我们在窗口中绘制的图形会神奇的消失掉。这是因为当窗口尺寸发生变化时,引起窗口重绘,会发送WM_PAINT消息,这是首先会擦除窗口的背景,然后再进行重绘操作,这样就把窗口中先前绘制的图形擦除掉了。如果希望所绘制的图形始终在窗口中呈现出来,就需要将这些图形保存起来,然后当窗口尺寸发生变化引起窗口重绘时,将这些图形再次在窗口中输出。当窗口重回是总是会调用程序视类的OnDraw函数,因此我们可以在该函数中完成图形的输出。而保存图形的方式多种多样,对于本程序来说,只需要绘制时的起点、终点和绘制的类型(圆、矩形或直线)就可以了。此时我们要新建一个类:CGraph。新增类类型为:Generic Class。为新增类添加成员变量: 例3-14 public:CGraph(UINT m_nDrawType, CPoint m_ptOrigin, CPoint m_ptEnd, COLORREF m_clr1, UINT m_LineWidth, int m_LineStyle);virtual CGraph();UINT m_nDrawType;CPoint m_ptOrigin;CPoint m_ptEnd;COLORREF m_clr1;int m_LineStyle;UINT m_LineWidth; 在GraphView中初始化变量: 例3-15 CGraph:CGraph(UINT m_nDrawType,CPoint m_ptOrigin,CPoint m_ptEnd,COLORREF m_clr1,UINT m_LineWidth,int m_LineStyle)this-m_nDrawType=m_nDrawType;this-m_ptOrigin=m_ptOrigin;this-m_ptEnd=m_ptEnd;this-m_clr1=m_clr1;this-m_LineWidth=m_LineWidth;this-m_LineStyle=m_LineStyle; 在C简单绘图演示View视类OnDraw中加入如下代码: 例3-16 void C简单绘图演示View:OnDraw(CDC* /*pDC*/)C简单绘图演示Doc* pDoc = GetDocument();ASSERT_VALID(pDoc);if (!pDoc)return;/ TODO: 在此处为本机数据添加绘制代码CClientDC dc(this);CBrush *pBrush=CBrush:FromHandle(HBRUSH)GetStockObject(NULL_BRUSH);dc.SelectObject(pBrush);for (int i=0;im_LineStyle,(CGraph*)m_ptrArray.GetAt(i)-m_LineWidth,(CGraph*)m_ptrArray.GetAt(i)-m_clr1);dc.SelectObject(&pen);switch(CGraph*)m_ptrArray.GetAt(i)-m_nDrawType)case 1:dc.Ellipse(CGraph*)m_ptrArray.GetAt(i)-m_ptOrigin.x,(CGraph*)m_ptrArray.GetAt(i)-m_ptOrigin.y,(CGraph*)m_ptrArray.GetAt(i)-m_ptEnd.x,(CGraph*)m_ptrArray.GetAt(i)-m_ptOrigin.y+(CGraph*)m_ptrArray.GetAt(i)-m_ptEnd.x-(CGraph*)m_ptrArray.GetAt(i)-m_ptOrigin.x);break;case 2:dc.Rectangle(CRect(CGraph*)m_ptrArray.GetAt(i)-m_ptOrigin,(CGraph*)m_ptrArray.GetAt(i)-m_ptEnd);break;case 0:dc.MoveTo(CGraph*)m_ptrArray.GetAt(i)-m_ptOrigin);dc.LineTo(CGraph*)m_ptrArray.GetAt(i)-m_ptEnd);break; 可以看到,代码中调用了一个CGraph*指针,其定义如下: 例3-17 void C简单绘图演示View:OnLButtonUp(UINT nFlags, CPoint point)/ TODO: 在此添加消息处理程序代码和/或调用默认值CClientDC dc(this);CPen pen(m_nLineStyle,m_nLineWidth,clr);dc.SelectObject(&pen);CBrush *pBrush=CBrush:FromHandle(HBRUSH)GetStockObject(NULL_BRUSH);dc.SelectObject(pBrush);switch(m_nDrawType)case 0:dc.MoveTo(m_ptOrigin);dc.LineTo(point);break;case 1:dc.Ellipse(m_ptOrigin.x,m_ptOrigin.y,point.x,m_ptOrigin.y+(point.x-m_ptOrigin.x);break;case 2:dc.Rectangle(CRect(m_ptOrigin,point);break;CGraph *pGraph=new CGraph(m_nDrawType,m_ptOrigin,point,clr,m_nLineWidth,m_nLineStyle);m_ptrArray.Add(pGraph);CView:OnLButtonUp(nFlags, point); 现在运行程序,并改变窗口大小,发现图形不再消失了。图3-9 运行后改变窗口大小后的结果第四章 设计结果及分析4.1程序的功能程序的基本功能:实现了,简单的绘制直线、矩形和圆,实时的显示系统当前时间,并且能自定义的改变线宽和线型以及选择画笔的颜色。运行界面:图4-1 简单绘图程序的运行界面4.2 程序的缺点功能限制只能绘制直线、矩形和圆,而且图形没有填充效果,只能改变画笔的颜色和类型,不能算是一个完整的程序。总 结其实学任何一种语言都是一样的。需要勤奋+毅力+运气=成功,这是我认为的一个公式。这里毅力和勤奋是个人因素,而运气这是先天的。如果以前没有接触过编程语言的话,在接触 VC 前我建议你先学习一些基础语言,比如 C 等都是一些比较好学的基础语言,我当初就是从 C 语言过度学 VC 的。学基础语言的目的是学习语法结构和如何编写概念,只有你理解和掌握了这些编程用的工具才能学习高级语言。这些基础语言中我建议大家学 C 语言,其实 VC 就是 C+也就是 C 语言的儿子,父亲学习起来比较容易上手,但遇到类似 WINDOWS 的程序的时候比较固执不容易沟通,在这种条件下才有了儿子,儿子比较开朗应变能力强,但是就因为他这些优点才使初学者难以掌握。 VC 是 C+语言,是一种面向对象的编程语言。他于基础语言不同点在于,基础语言是一条路走到底的(中断技术除外),而面向对象是等待你的指令才往下走,是被动的编程语言。这点是学习 VC 前必须扭 转的概念。 通过这次学年设计,我了解 vc+是 Windows 平台上的 C+编程环境,学习 VC 要了解很多Windows 平台的特性并且还要掌握 MFC、ATL、COM 等的知识,难度 比较大。Windows 下编程需要了解 Windows 的消息机制以及回调(callback)函数 的原理; MFC 是 Win32API 的包装类, 需要理解文档视图类的结构, 窗口类的结构,消息流向等等;COM 是代码共享的二进制标准,需要掌握其基本原理等等。基于我们这次用 VC+编写了一个简单的画图板,功能不是很多,但是从中的到不少收 获。主要有: 1对项目和文档的了解,我们在编写程序时,要对不同的文件进行编写。其中项目就是文件的集合,包括头文件、源代码文件、资源文件。文档窗口也称编辑窗口,是用户进行输入或编辑头文件、源文件、资源的区域。在编辑文件时,为了增加程序的可读性,系统用绿色显示注释语句,用蓝色显示关键字。 2菜单:我们绘制画图板时,就要建立一个“绘图”菜单。对于“绘图”菜 单下还有几个子菜单项,通过建立菜单同时让它实现菜单上的命令,这就要我们对 每个菜单项进行设置,诸如,ID、标题、快捷键、热键等。还有一些属性设置,设 置不好,容易出错,所以每次建立菜单,都需谨慎设置,记住每个菜单对应的参数。 3.文件打开与保存,对于我们绘制出一幅图片,那么我们就要把它保存下来。 如果我们无法保存,我们做了也就没没什么意义了。对于图形的保存于打开,我们 还存在很多问题,自定义保存不同文件夹下尚未解决,所以还需要我们进一步的学 习和了解,争取实现我们心里多希望的。 4.在编程时遇到了图像在变换大小时,原来的图形会消失,后来查看相关资料,这里涉及的一个重绘问题。经过多次修改,添加代码,才得 以解决。所以我觉得学习 VC+就要拿出那种坚持不懈的精神,做什么也是,只有你不放弃对它了解,才会实现我们自己想要的,这就要我们要不断的学习 VC+,从中学习更多我们没了解到的知识。 5对于 CView 视图,经过查询主要是负责内存数据与用户的交互。包括数据的显示、用户操作的响应(如菜单的选取、鼠标的响应) 。最重要的是 OnDraw(重绘窗口),通常用 CWnd:Invalidate()来启动它。另外,它通过消息映射表处理菜单、 工具条、快捷键和其他用户消息。 最后通过学习 VC+,从中受益匪浅,更多的知识,还有待于我们去挖掘实现 更多有趣的东西,同样它也是一个很强大的软件。致 谢经过近两周的努力,本次课程设计已经接近尾声,但由于自身知识、经验、能力、时间的有限,本设计中难免会有许多考虑不周全的地方。如果没有老师的督促指导,以及一起学习的同学们的帮助,想要顺利完成这个设计是很难的。在这次课程设计中,感谢老师,感谢我的组员们,没有我们的精诚合作,就没有我们出色的成果,同时,也要感谢其他组的同学,在我们有疑问的时候,给予了及时的解答,及时的提醒让我们少走很多弯路。还有,我的课程设计指导老师鲁统伟老师在课程设计上给予我了指导、提供给我的支持和帮助,这是我能顺利完成这次报告的主要原因,更重要的是老师利用自己渊博的知识以及丰富的设计经验帮我解决了许多技术上的难题,让我能在整个课程设计中做得更加完善。在此期间,我不仅学到了许多新的知识,而且也开阔了视野,提高了自己的程序设计能力。参考文献【1】 孙鑫 余安萍 编著.VC+深入详解【M】. 电子工业出版社出版, 339-415.【2】 谭浩强 主编 宋金珂 高丽华 张迎新 编著.VC+程序设计基础教程【M】 清华大学出 版社出版,【3】 黄维通.Visual C+面向对象与可视化程序设计【M】 清华大学出版社, 第2版.附录:主要程序代码 / 简单绘图View.h : C简单绘图View 类的接口/#pragma onceclass C简单绘图View : public CViewprotected: / 仅从序列化创建C简单绘图View();DECLARE_DYNCREATE(C简单绘图View)/ 特性public:C简单绘图Doc* GetDocument() const;/ 操作public:/ 重写public:virtual void OnDraw(CDC* pDC); / 重写以绘制该视图virtual BOOL PreCreateWindow(CREATESTRUCT& cs);protected:virtual BOOL OnPreparePrinting(CPrintInfo* pInfo);virtual void OnBeginPrinting(CDC* pDC, CPrintInfo* pInfo);virtual void OnEndPrinting(CDC* pDC, CPrintInfo* pInfo);/ 实现public:virtual C简单绘图View();#ifdef _DEBUGvirtual void AssertValid() const;virtual void Dump(CDumpContext& dc) const;#endifprotected:/ 生成的消息映射函数protected:afx_msg void OnFilePrintPreview();afx_msg void OnRButtonUp(UINT nFlags, CPoint point);afx_msg void OnContextMenu(CWnd* pWnd, CPoint point);DECLARE_MESSAGE_MAP()private:unsigned int m_nDrawType;CPoint m_ptOrigin;UINT m_nLineWidth;int m_nLineStyle;public:afx_msg void OnCircle();afx_msg void OnLine();afx_msg void OnRect();afx_msg void OnLButtonDown(UINT nFlags, CPoint point);afx_msg void OnLButtonUp(UINT nFlags, CPoint point);afx_msg void OnSetting();private:COLORREF clr;CPtrArray m_ptrArray;public:afx_msg void OnClose();#ifndef _DEBUG / 简单绘图View.cpp 中的调试版本inline C简单绘图Doc* C简单绘图View:GetDocument() const return reinterpret_cast(m_pDocument); #endif #pragma once/ CSettingDlg 对话框class CSettingDlg : public CDialogDECLARE_DYNAMIC(CSettingDlg)public:CSettingDlg(CWnd* pParent = NULL); / 标准构造函数virtual CSettingDlg();/ 对话框数据enum IDD = IDD_DLG_SETTING ;protected:virtual void DoDataExchange(CDataExchange* pDX); / DDX/DDV 支持DECLARE_MESSAGE_MAP()public:/afx_msg void OnIddDlgSetting();UINT m_nLi
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025中国跨境电商行业竞争态势分析及政策支持与市场机遇研究报告
- 2025中国裁断机行业替代品威胁与竞争压力研究报告
- 2025广东酒店管理职业技术学院中层干部岗招聘9人笔试考试备考试题及答案解析
- 2025中国裁断机出口竞争力与国际市场拓展策略报告
- 2025年工业互联网平台设备能效管理优化方案研究分析报告
- 2025年工业互联网平台设备互联标准实施效果研究报告
- 2025重庆沙坪坝区渝碚路街道办事处文员招聘1人笔试考试参考试题附答案解析
- 2025广东广州市天河区金穗幼儿园招聘编外教职工3人笔试考试参考试题附答案解析
- 项目管理框架协议合同范本
- 财务风险控制内审方案
- 养老院护理员培训课件
- 神经内科眩晕病例讨论课件
- 闲置设备设施管理办法
- 青春奋斗主题班会课件
- 高压氧科治疗技术应用指南
- 幼儿园保育员午睡管理培训
- 新能源汽车创新创业计划书范文
- 管制刀具班会课件
- 隐球菌肺部感染临床诊疗要点
- 高压灭菌器管理制度
- UbD理论在高中化学教学中的实践与应用研究
评论
0/150
提交评论