使用VisualC快速构建图形学程序.ppt
《使用VisualC快速构建图形学程序.ppt》由会员分享,可在线阅读,更多相关《使用VisualC快速构建图形学程序.ppt(32页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、使用VisualC快速构建图形学程序 Still waters run deep.流静水深流静水深,人静心深人静心深 Where there is life,there is hope。有生命必有希望。有生命必有希望使用VC构建图形学程序n nVC的绘图原理和基本方法n n程序框架的构建n n程序调试n n程序发布n n编写程序需注意的问题VC的绘图原理和基本方法n n设备上下文n nWM_PAINT消息n n常用的绘图函数设备上下文n n设备上下文(设备上下文(DEVICE CONTEXTDEVICE CONTEXT,简称,简称DCDC),),是一个是一个WindowsWindows的数据结
2、构,其中包含了输出设的数据结构,其中包含了输出设备(如显示器、打印机等)的绘图属性。可简单地备(如显示器、打印机等)的绘图属性。可简单地理解为设备环境,我们必须在这样的环境中进行图理解为设备环境,我们必须在这样的环境中进行图形的绘制。形的绘制。n n在在MFCMFC(Microsoft foundation classMicrosoft foundation class)中实现对)中实现对设备上下文封装的类称为设备上下文封装的类称为CDCCDC,在该类中包含了绘,在该类中包含了绘图所需的一切函数,包括颜色、画笔等属性的设置图所需的一切函数,包括颜色、画笔等属性的设置和实际的图形输出函数等。只要
3、创建和实际的图形输出函数等。只要创建CDCCDC的对象即的对象即可实现在窗口中绘图。可实现在窗口中绘图。n n在在CWndCWnd的派生类中,可以通过的派生类中,可以通过GetDC()GetDC()来创建一来创建一个个CDCCDC对象,该对象包含了与当前窗口客户区对象,该对象包含了与当前窗口客户区(client areaclient area)相关的设备上下文。)相关的设备上下文。CDC*CDC*GetDC(GetDC(););设备上下文n n除了标准的除了标准的CDCCDC类外,类外,MFCMFC中还提供了中还提供了CPaintDCCPaintDC这样的这样的CDCCDC派生类来实现客户区的
4、绘派生类来实现客户区的绘图。图。CPaintDCCPaintDC和和CDCCDC的不同点在于:的不同点在于:1 1)和)和CDCCDC不同,不同,CPaintDCCPaintDC的对象不是通过的对象不是通过GetDCGetDC()()这样的方法创建,而是在窗口类的这样的方法创建,而是在窗口类的WM_PAINTWM_PAINT消息的响应函数消息的响应函数OnPaint()OnPaint()中通过其构造函数创中通过其构造函数创建。建。2 2)CPaintDCCPaintDC有一个更新区域(有一个更新区域(update regionupdate region),),仅当绘图的动作落在更新区域内才做实
5、际的绘图仅当绘图的动作落在更新区域内才做实际的绘图操作,这样做能够节省时间。而操作,这样做能够节省时间。而CDCCDC的对象对应的对象对应整个客户区,所以比起整个客户区,所以比起CPaintDCCPaintDC得到的得到的dcdc可能可能效率低些。效率低些。设备上下文3)CPaintDC包含了BeginPaint()和EndPaint()两个方法,因此如果我们在OnPaint()消息响应过程中创建CPaintDC对象,则不用再调用这两个方法;而若我们在OnPaint()中创建的是CDC对象,则需显式地调用这两个函数处理绘图的开始和终止。n n为简单起见,推荐在OnPaint()中使用CPain
6、tDC类进行图形绘制。WM_PAINT消息n nWM_PAINTWM_PAINT消息是消息是WindowsWindows系统的标准消息,系统的标准消息,当操作系统或其他应用程序发出请求要求画当操作系统或其他应用程序发出请求要求画/重画重画一个应用程序窗口的一部分时,便会向该应用程一个应用程序窗口的一部分时,便会向该应用程序窗口发出该消息,该消息对绘图而言至关重要。序窗口发出该消息,该消息对绘图而言至关重要。比如:比如:1 1)我们在客户区画一条直线,此时便会触发)我们在客户区画一条直线,此时便会触发WM_PAINTWM_PAINT消息消息2 2)应用程序窗口被其它窗口覆盖或最小化,而后再)应用
7、程序窗口被其它窗口覆盖或最小化,而后再重新被激活(重新被激活(ActivateActivate),此时也会触发),此时也会触发WM_PAINTWM_PAINT消息消息WM_PAINT消息n n由于由于WM_PAINTWM_PAINT消息为程序开发人员屏蔽了何时消息为程序开发人员屏蔽了何时应对客户区执行刷新这样的繁琐细节,我们可将应对客户区执行刷新这样的繁琐细节,我们可将画图的具体过程放在画图的具体过程放在WM_PAINTWM_PAINT消息响应函数消息响应函数OnPaintOnPaint()()中调用。中调用。n n如果不在如果不在OnPaint()OnPaint()中调用画图过程,而在某个中
8、调用画图过程,而在某个按钮或复选框的响应事件中调用,考虑会有什么按钮或复选框的响应事件中调用,考虑会有什么后果。后果。n n如果希望客户区在下次系统发送如果希望客户区在下次系统发送WM_PAINTWM_PAINT消息消息时被更新,则需先执行时被更新,则需先执行CWnd:Invalidate()CWnd:Invalidate()函函数,否则数,否则OnPaint()OnPaint()方法不会反映当前在客户区方法不会反映当前在客户区所作的更改。所作的更改。WM_PAINT消息n n需要注意的是,由于在绘图过程中,需要注意的是,由于在绘图过程中,OnPaint()OnPaint()函数可能需要不断地
9、设置当前函数可能需要不断地设置当前DCDC的某些属性值,的某些属性值,如颜色,线条的粗细等等,因此在该函数中,通如颜色,线条的粗细等等,因此在该函数中,通常需要保存和还原有关常需要保存和还原有关DCDC的属性值,以保证在的属性值,以保证在OnPaintOnPaint()()执行前后执行前后DCDC的状态是一样的,即实现该过程对的状态是一样的,即实现该过程对用户的透明。具体地说,就是应在函数的开头缓用户的透明。具体地说,就是应在函数的开头缓存当前存当前DCDC的属性值,而后在函数的末尾还原这些的属性值,而后在函数的末尾还原这些属性值,这样即使属性值,这样即使DCDC的属性在绘图过程中被改变,的属
10、性在绘图过程中被改变,对用于而言,他操作的仍是原先的设备上下文对用于而言,他操作的仍是原先的设备上下文(设备环境)。(设备环境)。常用的绘图函数n n以下是一些常用的绘图函数: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);该函数可理解
11、为若干次MoveTo和LineTo函数的复合4)绘制矩形CDC:Rectangle(int x1,int y1,int x2,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:
12、TextOut(int x,int y,const CString&str);以上函数基本上可以满足我们绘图的需要。当然,除了绘图函数,我们还需要合理地设置当前的设备上下文,以使绘制的图形更加美观。下面介绍几个有关设备上下文属性的常用函数:常用的绘图函数1)设置颜色COLORREF RGB(BYTE byRed,BYTE byGreen,BYTE byBlue);2)创建画笔CPen:CreatePen(int nPenStyle,int nWidth,COLORREF crColor);3)创建画刷(有多种画刷,仅列出一种)CBrush:CreateSolidBrush(COLORREF c
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 使用 VisualC 快速 构建 图形学 程序
限制150内