使用VisualC快速构建图形学程序.ppt

上传人:牧羊曲112 文档编号:4951804 上传时间:2023-05-25 格式:PPT 页数:32 大小:313.50KB
返回 下载 相关 举报
使用VisualC快速构建图形学程序.ppt_第1页
第1页 / 共32页
使用VisualC快速构建图形学程序.ppt_第2页
第2页 / 共32页
使用VisualC快速构建图形学程序.ppt_第3页
第3页 / 共32页
使用VisualC快速构建图形学程序.ppt_第4页
第4页 / 共32页
使用VisualC快速构建图形学程序.ppt_第5页
第5页 / 共32页
点击查看更多>>
资源描述

《使用VisualC快速构建图形学程序.ppt》由会员分享,可在线阅读,更多相关《使用VisualC快速构建图形学程序.ppt(32页珍藏版)》请在三一办公上搜索。

1、使用Visual C+6.0快速构建图形学程序,福州大学2004.11,使用VC构建图形学程序,VC的绘图原理和基本方法程序框架的构建程序调试程序发布编写程序需注意的问题,VC的绘图原理和基本方法,设备上下文WM_PAINT消息常用的绘图函数,设备上下文,设备上下文(DEVICE CONTEXT,简称DC),是一个Windows的数据结构,其中包含了输出设备(如显示器、打印机等)的绘图属性。可简单地理解为设备环境,我们必须在这样的环境中进行图形的绘制。在MFC(Microsoft foundation class)中实现对设备上下文封装的类称为CDC,在该类中包含了绘图所需的一切函数,包括颜色

2、、画笔等属性的设置和实际的图形输出函数等。只要创建CDC的对象即可实现在窗口中绘图。在CWnd的派生类中,可以通过GetDC()来创建一个CDC对象,该对象包含了与当前窗口客户区(client area)相关的设备上下文。CDC*GetDC();,设备上下文,除了标准的CDC类外,MFC中还提供了CPaintDC这样的CDC派生类来实现客户区的绘图。CPaintDC和CDC的不同点在于:1)和CDC不同,CPaintDC的对象不是通过GetDC()这样的方法创建,而是在窗口类的WM_PAINT消息的响应函数OnPaint()中通过其构造函数创建。2)CPaintDC有一个更新区域(update

3、 region),仅当绘图的动作落在更新区域内才做实际的绘图操作,这样做能够节省时间。而CDC的对象对应整个客户区,所以比起CPaintDC得到的dc可能效率低些。,设备上下文,3)CPaintDC包含了BeginPaint()和EndPaint()两个方法,因此如果我们在OnPaint()消息响应过程中创建CPaintDC对象,则不用再调用这两个方法;而若我们在OnPaint()中创建的是CDC对象,则需显式地调用这两个函数处理绘图的开始和终止。为简单起见,推荐在OnPaint()中使用CPaintDC类进行图形绘制。,WM_PAINT消息,WM_PAINT消息是Windows系统的标准消息

4、,当操作系统或其他应用程序发出请求要求画/重画一个应用程序窗口的一部分时,便会向该应用程序窗口发出该消息,该消息对绘图而言至关重要。比如:1)我们在客户区画一条直线,此时便会触发WM_PAINT消息2)应用程序窗口被其它窗口覆盖或最小化,而后再重新被激活(Activate),此时也会触发WM_PAINT消息,WM_PAINT消息,由于WM_PAINT消息为程序开发人员屏蔽了何时应对客户区执行刷新这样的繁琐细节,我们可将画图的具体过程放在WM_PAINT消息响应函数OnPaint()中调用。如果不在OnPaint()中调用画图过程,而在某个按钮或复选框的响应事件中调用,考虑会有什么后果。如果希望

5、客户区在下次系统发送WM_PAINT消息时被更新,则需先执行CWnd:Invalidate()函数,否则OnPaint()方法不会反映当前在客户区所作的更改。,WM_PAINT消息,需要注意的是,由于在绘图过程中,OnPaint()函数可能需要不断地设置当前DC的某些属性值,如颜色,线条的粗细等等,因此在该函数中,通常需要保存和还原有关DC的属性值,以保证在OnPaint()执行前后DC的状态是一样的,即实现该过程对用户的透明。具体地说,就是应在函数的开头缓存当前DC的属性值,而后在函数的末尾还原这些属性值,这样即使DC的属性在绘图过程中被改变,对用于而言,他操作的仍是原先的设备上下文(设备环

6、境)。,常用的绘图函数,以下是一些常用的绘图函数:1)设置画笔的当前位置CDC:MoveTo(int x,int y);CDC:MoveTo(POINT point);2)从当前位置向指定点画线段CDC:LineTo(int x,int y);CDC:LineTo(POINT point);我们在实现曲线算法时,实际上是通过许多小的直线段去拟合曲线。,常用的绘图函数,3)多点连接CDC:Polyline(LPPOINT lpPoints,int nCount);该函数可理解为若干次MoveTo和LineTo函数的复合4)绘制矩形CDC:Rectangle(int x1,int y1,int x

7、2,int y2);CDC:Rectangle(LPCRECT lpRect);,常用的绘图函数,5)绘制椭圆CDC:Ellipse(int x1,int y1,int x2,int y2);CDC:Ellipse(LPCRECT lpRect);6)在屏幕上打点CDC:SetPixel(int x,int y,COLORREF crColor);CDC:SetPixel(POINT point,COLORREF crColor);,常用的绘图函数,7)在屏幕上输出文本信息CDC:TextOut(int x,int y,const CString 以上函数基本上可以满足我们绘图的需要。当然,除

8、了绘图函数,我们还需要合理地设置当前的设备上下文,以使绘制的图形更加美观。下面介绍几个有关设备上下文属性的常用函数:,常用的绘图函数,1)设置颜色COLORREF RGB(BYTE byRed,BYTE byGreen,BYTE byBlue);2)创建画笔CPen:CreatePen(int nPenStyle,int nWidth,COLORREF crColor);3)创建画刷(有多种画刷,仅列出一种)CBrush:CreateSolidBrush(COLORREF crColor);,常用的绘图函数,4)为设备上下文设置属性HGDIOBJ SelectObject(HDC hdc,HG

9、DIOBJ hgdiobj);5)释放设备上下文属性BOOL DeleteObject(HGDIOBJ hObject);注意:在应用程序结束时需显式地释放设备上下文DC以释放资源。,返回,程序框架的构建,在Visual C+6.0环境下,为了创建一个绘图程序,通常我们可以选择两种Projects:,一种是MFC AppWizard(exe),用于构建基于MFC的应用程序,另一种是Win32 Applicatoin,用于构建基于API的应用程序,前面介绍的方法基本上都是MFC封装的方法,如果直接使用API编写SDK程序,则方法有所不同。,基于MFC程序框架的构建,MFC AppWizard可生

10、成三类应用程序:,Single document:单文档结构,如Notepad,Multiple documents:多文档结构,如Word,Dialog based:基于对话框的程序,任何一种结构均能实现绘图功能,为简单起见,我们选择Dialog based类型的应用程序。,基于MFC程序框架的构建,基于对话框的应用程序默认生成一个App类、一个AboutDlg类和一个界面Dlg类,App类用于创建和控制整个应用程序的生命周期,实现我们所需的绘图程序通常不需要修改该类中的代码;AboutDlg类即我们常见的“关于”窗口类;Dlg类才是真正与用户交互的界面,我们就是要在该界面中绘制各种曲线,并

11、完成与用户的交互。如果要在一个独立的文件中编写图形算法代码,则可以在应用程序中生成一个新的以CWnd(generic CWnd)为基类的子类。,基于MFC程序框架的构建,VC6.0环境的简要介绍:,基于MFC程序框架的构建,在VC6.0中创建一个新类:,基于MFC程序框架的构建,VC6.0环境的简要介绍:,基于MFC程序框架的构建,VC6.0环境的简要介绍:,基于MFC程序框架的构建,在VC6.0中类向导信息(Class Wizard)是非常重要的,在VC6.0的代码环境中按下Ctrl+W便可看到MFC ClassWizard窗口:,基于MFC程序框架的构建,MFC ClassWizard窗口

12、中的控件变量设置:,基于MFC程序框架的构建,在搭建了程序框架以后,我们就可以根据需要在相应的地方填入实现算法和代码和其它控制代码。这其中需要用到一定的数据结构和数据类型,MFC中定义了非常丰富的数据类型,一些常用的数据类型举例如下:int:整型,如iNumfloat,double:浮点型,如fBernsteinBOOL:布尔型,如bSelectCString:字符串型,如sTextPOINT:坐标点结构类型,包含x维和y维HPEN:画笔类型,返回,程序调试,当应用程序编写完成以后便进入程序的调试阶段。调试主要完成的工作有程序的功能正确性检验、稳定性检验以及异常情况的排除等。在进行应用程序编译

13、时,如果编译器发现了任何语法或语义错误,都会在编译的消息栏(Build)中给予提示,我们可直接根据提示信息找到错误所在处,进而作出修改。还有一些错误属于运行时错误,是在编译阶段无法检查出来的,如地址越界、引用了无效的变量等等,这些错误的检查和排除有赖于VC开发环境所提供的调试工具。,程序调试,Visual C+6.0为我们提供了强大的调试功能,其中包括断点、单步跟踪、快速查看等。要充分发挥调试的功能,必须学会恰当地在程序中设置断点。启用Debug模式(工具栏上点击右键选中“Build”,在编译类型中选择“Win32 Debug”),在可疑的出错点标上断点(在代码行上按F9键),让程序执行到该处

14、停下来,进而执行单步跟踪(按F10键,跟踪变量的值)是查错的基本方法。在Debug模式下,VC环境中有一个调试工具栏窗口(工具栏上点击右键选中”Debug”),同时下方的信息栏会列出当前变量的地址和数值,应充分利用这些工具的功能。,返回,程序发布,当编写和调试完应用程序后,若确认程序无误,便可以发布该程序。由于发布的程序中不包含复杂的调试信息,因此发布的可执行程序相比调试的可执行程序要短小精悍得多。此外,发布的程序中包含了程序执行所需的链接文件,使得大部分程序在没有VC开发环境的机器上也可运行。在工具栏上点击右键选中“Build”,在编译类型中选择“Win32 Release”,此时再执行编译

15、得到的便是发布版本的程序。该程序位于应用程序工作目录下的Release子目录中。,返回,编写程序需注意的问题,一段好的程序不仅能实现所需的功能,而且还应具有良好的风格,以便阅读和修改。因此,需规范编程的风格。良好的编程风格至少包括:1)规范的变量和函数命名,包括控件变量和自定义变量、函数的命名控件ID命名如:IDC_BUTTON_REMOVEPOINT控件变量命名如:m_btnRemovePoint自定义变量命名如:fBernstein,m_iPointNum函数命名如:DrawBezier(int n,CPaintDC*dc),编写程序需注意的问题,2)在程序中加入充分、准确的注释,编写程序需注意的问题,3)代码行的缩进与对齐,编写程序需注意的问题,使用联机帮助从模仿开始做好程序的备份工作,Top,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号