资源预览内容
第1页 / 共31页
第2页 / 共31页
第3页 / 共31页
第4页 / 共31页
第5页 / 共31页
第6页 / 共31页
第7页 / 共31页
第8页 / 共31页
第9页 / 共31页
第10页 / 共31页
亲,该文档总共31页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
第9章 文本、图形输出Windows图形设备接口GDI(Graphic Device Interface)提供了在Windows下绘图的基本功能。想要在Windows应用程序窗口中显示图形,必须使用GDI中的函数。而所有的绘制操作都是通过设备描述表进行的。Windows设备描述表DC(device contexts),是对各种不同设备的抽象,应用程序只要向DC输出,由DC负责处理不同设备的差异。本章将介绍Visual C+中,有关图形、文本输出显示的相关知识。9.1 基础知识图形设备接口(GDI)和设备的驱动程序实现了设备无关性的图形的显示,而设备描述表(DC)则用来确定GDI输出的位置和形象的属性。9.1.1 GDI绘图的实现图形设备接口(GDI)可理解为一个可执行程序,它处理来自Windows应用程序的图形函数调用,然后把这些调用传递给合适的设备驱动程序,由设备驱动程序来执行与硬件相关的函数,并产生最后的输出结果。GDI可以看作是一个应用程序与输出设备之间的中介,一方面,GDI向应用程序提供了一个设备无关的编程环境,另一方面,它又以设备相关的格式和具体的设备打交道。9.1.2 MFC图形对象类Windows提供了多种用于在设备描述表中进行绘制的图形对象,如画笔、位图、调色板、区域、路径等。MFC对Windows中的这些图形对象进行了封装,提供了等同于它们的图形对象类。(具体内容请参照本书)9.1.3 库存GDI对象Windows预定义了一些标准GDI对象,供系统和程序使用,称为库存GDI对象,它们可为多个程序同时使用。库存GDI对象包括最常用的字体、画笔、画刷等, 9.1.4 与图形绘制有关的简单数据类型在详细介绍使用设备描述表和GDI对象实现图形输出之前,首先介绍几个常用的与图形绘制有关的数据结构类。1CPoint类2CSize类3CRect类4RGB宏9.1.5 MFC应用程序框架中的图形绘制与刷新在Windows应用程序中,通常在绘制图形之前调用BeginPaint函数,然后在设备描述表中进行一系列的绘制操作,最后调用EndPaint函数结束绘制。MFC类CPaintDC封装了这一过程。在构造CPaintDC对象的同时,其构造函数自动调用BeginPaint函数;在消毁CPaintDC对象的同时,其析构函数自动调用EndPaint函数。9.2 MFC设备描述表CDC类在MFC中,CDC类封装了设备描述表(DC),该类的核心是m_hDC,代表一个指向窗口DC的句柄。具体使用时,MFC提供了几个常用的CDC类的派生类:CPaintDC、CClientDC和CWindowDC,它们的用法有着细微的差别。9.2.1 CDC及其派生类CDC类派生自CObject,它具有CObject类的共同特性,如可以动态创建,可进行序列化操作。CDC类既包括了设备属性又包括了绘图方法,通过此方法可以实现GDI的所有图形输出。9.2.2 文本输出输出文本一般使用CDC:TextOut函数,它可以输出单行的文本,原型如下:BOOL TextOut( int x, int y, const CString& str )参数x和y为文本的输出位置坐标,参数str为要输出的文本内容。9.2.3 CDC的常用绘图函数CDC类中提供了很多绘图函数,可以通过这些函数绘制点、线、矩形、圆、多边形等。9.3 使用画笔和画刷进行绘图在Windows作图中,画笔和画刷是使用最多的GUI对象。绘制图形时,画笔负责绘制图形区域的边界,而画刷负责填充其内部区域。9.3.1 画笔对象及其使用MFC类CPen封装了GDI中的画笔对象,画笔对象代表了进行绘制时所用的线条。9.3.2 使用画笔绘图实例下面给出一个使用不同类型画笔绘制图形的实例。通过本实例掌握画笔对象的使用和使用图形函数绘制图形。9.3.3 画刷对象及其使用刷子对象用来在GDI输出时填充一个封闭图形的内部,如当画圆形或方形时,系统会用当前的刷子对内部进行填充。MFC类CBrush封装了标准的Windows刷子对象。创建画刷时,通常先定义一个CBrush对象,然后调用CreateSolidBrush、CreateaHatchBrush或CreatePatternBrush函数之一来定义画刷对象的属性。9.3.4 使用画刷绘图实例下面给出一个使用不同类型画刷绘制图形的实例,通过本实例掌握画刷对象的使用。(具体内容请参照本书)9.4 字体对象MFC类CFont封装了Windows图形设备接口中的字体对象。字体对象决定的设备上下文中进行文本输出的字符样式。9.4.1 字体对象的创建在使用字体对象的时候,一般先创建一个CFont对象,然后调用CreateFont、CreateFontIndirect和CreatePointFont之一的成员函数来对该字体对象进行初始化。 9.4.2 获取字体信息对于正在使用的字体,有时候需要获取字体的相关信息,如字体的高度、宽度、浓淡等,CDC类提供了GetTextMetrics函数来获取字体的相关信息。BOOL GetTextMetrics(LPTEXTMETRIC lpMetrics ) const;9.4.3 字体对象使用实例下面给出一个使用字体对象创建字体进行文本输出的实例。通过本实例掌握字体对象的创建和使用以及字体信息的获取。启动Visual C+6.0,利用AppWizard创建一个基于单文档的MFC应用程序“Ch9Demo5”, 9.5 位图和区域对象使用Visual C+进行图形图像输出及其相关的操作中,位图和区域对象也经常用到。本节将围绕这三个对象的具体应用进行讨论。9.5.1 设备相关位图(DDB)Windows中图像的显示一般是将预先准备好的图像复制到显示区域中,这样便于提高图像的显示速度。Windows提供了两种使用图形拷贝的方法:通过设备相关位图(DDB)和设备无关位图(DIB)。(具体内容请参照本书)9.5.2 CBitmap应用实例下面给出一个使用CBitmap对象实现在客户窗口中进行位图显示的实例。通过本实例掌握CBitmap对象的创建和以及位图显示的方法。启动Visual C+6.0,利用AppWizard创建一个基于单文档的MFC应用程序“Ch9Demo6”。利用上节介绍的方法,向工程添加位图资源“IDB_BITMAP1”,将已有的图形文件“飞机4.bmp”导入。9.5.3 设备无关位图(DIB)针对DDB的不足,从Windows 3.0开始引入了与设备无关的位图(DIB),提供了适用于交换的图像格式。此种格式的位图特点是:它自带颜色信息,因此是设备无关的,它通常以BMP为文件扩展名。9.5.4 区域对象(CRgn)区域是指一个矩形、椭圆形、多边形,或者两个及两个以上图形的组合图形。它可以被填充、涂色、反转、执行击中测试(测试光标的位置)等。9.5.5 CRgn应用实例下面给出一个CRgn对象的应用实例。本实例将创建一个椭圆区域和一个多边形区域,而后通过区域操作获取其交集和交集以为的区域,分别用不同的画刷填充。当鼠标在这两个区域单击左键时,分别给出不同的提示信息。9.6 坐标系统与映射模式到现在为止,前面所有的图形输出都是以像素为单位,相对于客户区的左上角的坐标系统,这是默认的方式。Windows提供了几种映射模式,每一种映射都对应着一种坐标系统,本节将详细介绍有关坐标系统与映射模式的使用。9.6.1 坐标系统GDI绘图操作实际上用到了两种类型的坐标系统:逻辑坐标和物理坐标(也称为设备坐标)。9.6.2 映射模式映射模式定义了Windows如何将GDI函数中指定的逻辑坐标映射为物理坐标。Windows默认的映射模式为MM_TEXT映射模式。在这样的坐标系统中,向右的方向为x轴的正方向,向下的方向为y轴的正方向。无论是x方向还是y方向,每一个单位长度都代表设备上的一个像素。(具体内容请参照本书)9.6.3 自定义映射模式在很多情况下,使用系统预定义的映射系统非常的恰当,但有时也需要用户自己定义映射模式更为方便。如编写一个绘制函数图形的应用程序,把整个屏幕映射为一个平面直角坐标系会更加的恰当。使用如下函数调用就可以指定自定义的映射模式:dc.SetMapMode(MM_ANISOTROPIC); (具体内容请参照本书)9.6.4 坐标映射使用实例下面给出一个坐标映射的使用实例。通过自定义映射模式,将客户窗口映射为一个平面直角坐标系,即原点在客户区中心,原点向左为X轴负方向,原点向上为Y轴正方向。在客户窗口绘制一条正弦曲线,幅度为客户区高度的一半,显示四个周期。实现如下:启动Visual C+6.0,利用AppWizard创建一个基于单文档的MFC应用程序“Ch9Demo8”,(具体内容请参照本书)
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号