C程序设计教程_第1页
C程序设计教程_第2页
C程序设计教程_第3页
C程序设计教程_第4页
C程序设计教程_第5页
已阅读5页,还剩62页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第第 3 3 章章 图形和文本输出图形和文本输出 3.1 3.1 图形设备接口和设备环境图形设备接口和设备环境 3.2 GDI3.2 GDI对象对象CGdiObjectCGdiObject 3.3 3.3 画笔和画刷的使用画笔和画刷的使用 3.4 3.4 处理文本处理文本 3.5 3.5 位图位图3.6 3.6 应用实例应用实例Visual C+程序设计教程2022/2/22第第3 3章章 图形与文本图形与文本 23.1 3.1 图形设备接口和设备环境图形设备接口和设备环境 3.1.1 3.1.1 图形设备接口图形设备接口 WindowsWindows提供了一个称为提供了一个称为图形设备接口图

2、形设备接口(Graphics Device Interface(Graphics Device Interface,GDI)GDI)的抽象接口。的抽象接口。 GDIGDI负责管理用户绘图操作时功能的转换,负责管理用户绘图操作时功能的转换,实现实现设备无关性设备无关性。 Visual C+程序设计教程2022/2/22第第3 3章章 图形与文本图形与文本 3 应用程序可以使用应用程序可以使用GDIGDI创建创建3 3种类型的图形输出:种类型的图形输出:矢量图形、光栅图形和文本矢量图形、光栅图形和文本。1.1.矢量图形矢量图形 矢量图形输出是指画线和填充图形,包括点、矢量图形输出是指画线和填充图形

3、,包括点、直线、曲线、多边形、扇形和矩形等。直线、曲线、多边形、扇形和矩形等。2.2.光栅图形光栅图形 光栅图形输出是指光栅图形函数对以位图形式光栅图形输出是指光栅图形函数对以位图形式存储的数据进行操作,它包括各种位图和图标的输存储的数据进行操作,它包括各种位图和图标的输出。出。3.3.文本文本 与与DOSDOS字符方式下输出文本不同,字符方式下输出文本不同,WindowsWindows中的中的文本是按图形方式输出的。文本是按图形方式输出的。Visual C+程序设计教程2022/2/22第第3 3章章 图形与文本图形与文本 43.1.2 3.1.2 设备环境设备环境 WindowsWindo

4、ws应用程序的输出不直接面向显示器或打应用程序的输出不直接面向显示器或打印机等物理设备,而是面向一个称之为印机等物理设备,而是面向一个称之为设备环境设备环境(Device Context(Device Context,DC)DC)的虚拟逻辑设备。的虚拟逻辑设备。 设备环境设备环境DCDC,也称设备描述表或设备上下文。它,也称设备描述表或设备上下文。它是由是由GDIGDI创建、用来代表创建、用来代表设备连接的数据结构设备连接的数据结构。 DCDC的主要功能有以下几种:的主要功能有以下几种:Visual C+程序设计教程2022/2/22第第3 3章章 图形与文本图形与文本 5(1) (1) 允许

5、应用程序使用一个输出设备。允许应用程序使用一个输出设备。(2) (2) 提供提供WindowsWindows应用程序、设备驱动和输出设备应用程序、设备驱动和输出设备之间的连接。之间的连接。(3) (3) 保存当前信息,例如当前的画笔、画刷、字体保存当前信息,例如当前的画笔、画刷、字体和位图等图形对象及其属性,以及颜色和背景等影和位图等图形对象及其属性,以及颜色和背景等影响图形输出的绘图模式。响图形输出的绘图模式。(4) (4) 保存窗口剪切区域,限制程序输出到输出设备保存窗口剪切区域,限制程序输出到输出设备中窗口覆盖的区域。中窗口覆盖的区域。Visual C+程序设计教程2022/2/22第第

6、3 3章章 图形与文本图形与文本 63.1.3 设备环境类设备环境类 1.1.设备环境类设备环境类CDCCDC及其功能及其功能 CObject CDC CClientDC CMetaFileDC CPaintDC CWindowDC 所有设备环境类的基类,对所有设备环境类的基类,对GDI的所有绘图函数进行了封装的所有绘图函数进行了封装用于响应窗口重绘消息的绘图输用于响应窗口重绘消息的绘图输出,不仅可对客户区进行操作,出,不仅可对客户区进行操作,还可以对非客户区进行操作还可以对非客户区进行操作代表窗口客户区的设备环境代表窗口客户区的设备环境代表整个窗口的设备环境,包括代表整个窗口的设备环境,包括

7、客户区和非客户区客户区和非客户区代表代表Windows图元文件设备环境图元文件设备环境Visual C+程序设计教程2022/2/22第第3 3章章 图形与文本图形与文本 72.2.设备环境类设备环境类CDCCDC的一些常用函数的一些常用函数Visual C+程序设计教程2022/2/22第第3 3章章 图形与文本图形与文本 8Visual C+程序设计教程2022/2/22第第3 3章章 图形与文本图形与文本 93.1.4 3.1.4 颜色的设置颜色的设置 WindowsWindows用用COLORREFCOLORREF类型的数据存放颜色类型的数据存放颜色,它,它是一个是一个3232位整数。

8、位整数。 任何一种颜色都是由任何一种颜色都是由红、绿、蓝红、绿、蓝3 3种基本颜色种基本颜色组成的,组成的,COLORREFCOLORREF类型数据的低位字节存放红色强类型数据的低位字节存放红色强度值,第度值,第2 2个字节存放绿色强度值,第个字节存放绿色强度值,第3 3个字节存放个字节存放蓝色强度值,高位字节为蓝色强度值,高位字节为0 0,每一种颜色分量的取,每一种颜色分量的取值范围为值范围为0 0255255。Visual C+程序设计教程2022/2/22第第3 3章章 图形与文本图形与文本 10MFCMFC提供了提供了RGBRGB宏,用于设置颜色,其使用形式为:宏,用于设置颜色,其使用

9、形式为: RGB(byRed,byGreen,byBlueRGB(byRed,byGreen,byBlue) ) 其中参数其中参数byRedbyRed、byGreenbyGreen和和byBluebyBlue分别表示红、分别表示红、绿、蓝分量值绿、蓝分量值( (范围范围0 0255)255)。 下表列出了一些常用颜色的下表列出了一些常用颜色的RGBRGB值。值。Visual C+程序设计教程2022/2/22第第3 3章章 图形与文本图形与文本 11Visual C+程序设计教程2022/2/22第第3 3章章 图形与文本图形与文本 121.1.传统的传统的SDKSDK获取设备环境的方法获取设

10、备环境的方法 采用采用SDKSDK方法编程,获取设备环境的方法有两种:方法编程,获取设备环境的方法有两种: (1 1)在)在WM_PAINTWM_PAINT消息处理函数中通过调用消息处理函数中通过调用APIAPI函函数数BeginPaintBeginPaint( )( )获取设备环境,在消息处理函数返回获取设备环境,在消息处理函数返回前调用前调用APIAPI函数函数EndPaintEndPaint( )( )释放设备环境。释放设备环境。 (2 2)如果绘图操作不是在)如果绘图操作不是在WM_PAINTWM_PAINT消息处理函数消息处理函数中,需要通过调用中,需要通过调用APIAPI函数函数G

11、etDCGetDC( )( )获取设备环境,调获取设备环境,调用用APIAPI函数函数ReleaseDCReleaseDC( )( )释放设备环境。释放设备环境。3.1.5 获取设备环境获取设备环境 Visual C+程序设计教程2022/2/22第第3 3章章 图形与文本图形与文本 132.MFC2.MFC应用程序获取设备环境的方法应用程序获取设备环境的方法 在一个在一个MFCMFC应用程序中获得应用程序中获得DCDC的方法主要有两种:的方法主要有两种: (1 1)接受一个参数为指向)接受一个参数为指向CDCCDC对象的指针;对象的指针; (2 2)声明一个)声明一个 MFCMFC设备环境类

12、的对象,并使用设备环境类的对象,并使用thisthis指针为该对象赋值。指针为该对象赋值。Visual C+程序设计教程2022/2/22第第3 3章章 图形与文本图形与文本 143.1.6 编程实例编程实例【例【例3.13.1】 编写一个单文档的编写一个单文档的MFCMFC应用程序应用程序Li3_1Li3_1,利,利用表用表3-23-2中的函数绘制几种常见的几何图形。当程序中的函数绘制几种常见的几何图形。当程序运行时,显示如图所示结果。运行时,显示如图所示结果。Visual C+程序设计教程2022/2/22第第3 3章章 图形与文本图形与文本 15【例【例3.23.2】编写一个单文档的】编

13、写一个单文档的MFCMFC应用程序应用程序Li3_2Li3_2,使,使用用CPaintDCCPaintDC类完成例类完成例3.13.1同样的功能。同样的功能。Visual C+程序设计教程2022/2/22第第3 3章章 图形与文本图形与文本 16【例【例3.33.3】 编写一个基于对话框的编写一个基于对话框的MFCMFC应用程序应用程序Li3_3Li3_3,程序运行后,当用户在窗口中单击鼠标左键,程序运行后,当用户在窗口中单击鼠标左键时,在窗口中绘制一个椭圆。时,在窗口中绘制一个椭圆。 Visual C+程序设计教程2022/2/22第第3 3章章 图形与文本图形与文本 17【例【例3.43

14、.4】编写一个基于对话框的】编写一个基于对话框的MFCMFC应用程序应用程序Li3_4Li3_4,使用使用CWindowDCCWindowDC类完成例类完成例3.33.3同样的功能。同样的功能。Visual C+程序设计教程2022/2/22第第3 3章章 图形与文本图形与文本 183.2 3.2 GDIGDI对象类对象类CGdiObjectCGdiObject GDIGDI对象是对象是WindowsWindows图形设备接口的抽象绘图图形设备接口的抽象绘图工具工具。除了画笔和画刷,其他。除了画笔和画刷,其他GDIGDI对象还包括字体、对象还包括字体、位图和调色板。位图和调色板。 MFCMFC

15、对对GDIGDI对象进行了很好的封装,提供了封对象进行了很好的封装,提供了封装装GDIGDI对象的类,如对象的类,如CPenCPen、CBrushCBrush、CFontCFont、CBitmapCBitmap和和CPaletteCPalette等,这些类都是等,这些类都是GDIGDI对象类对象类CGdiObjectCGdiObject的派生类,它们的继承关系如图所示。的派生类,它们的继承关系如图所示。 Visual C+程序设计教程2022/2/22第第3 3章章 图形与文本图形与文本 19 CObject CGdiObject CBitmap CBrush CFont CPalette C

16、Pen CRgn 画笔。绘制对象的边框以及直线和曲线。画笔。绘制对象的边框以及直线和曲线。画刷。填充一个封闭图形对象内部区域画刷。填充一个封闭图形对象内部区域字体对象。用来绘制文本字体对象。用来绘制文本位图。装载和操作位图位图。装载和操作位图调色板。包含系统可用的色彩信息,是应调色板。包含系统可用的色彩信息,是应用程序和彩色输出设备环境的接口用程序和彩色输出设备环境的接口区域。用于设备环境区域。用于设备环境(通常是窗口通常是窗口)内的区内的区域操作域操作Visual C+程序设计教程2022/2/22第第3 3章章 图形与文本图形与文本 203.3 3.3 画笔和画刷的使用画笔和画刷的使用 V

17、isual C+程序设计教程2022/2/22第第3 3章章 图形与文本图形与文本 213.3.1 使用库存使用库存(stock)对象对象 Visual C+程序设计教程2022/2/22第第3 3章章 图形与文本图形与文本 22选择库存对象选择库存对象: :使用使用SelectStockObjectSelectStockObject( )( )函数函数 如果选择成功,函数如果选择成功,函数SelectStockObjectSelectStockObject( )( )将将返回以前的返回以前的CGdiObjectCGdiObject对象的指针。对象的指针。 Visual C+程序设计教程202

18、2/2/22第第3 3章章 图形与文本图形与文本 23利用利用CGdiObjectCGdiObject类的成员函数类的成员函数CreateStockObjectCreateStockObject( )( )将将GDIGDI对象设置成指定的库存对象。对象设置成指定的库存对象。 声明一个声明一个GDIGDI对象,调用成员函数对象,调用成员函数SelectObjectSelectObject( )( ),将与库存对象关联的将与库存对象关联的GDIGDI对象选入当前的设备环境,代对象选入当前的设备环境,代码如下所示。码如下所示。 CBrushCBrushBrushOld,BrushNewBrushOl

19、d,BrushNew; ;/关联库存画刷对象关联库存画刷对象BrushNew.CreateStockObject(BLACK_BRUSHBrushNew.CreateStockObject(BLACK_BRUSH); ); BrushOldBrushOldpDC-SelectObject(&BrushNewpDC-SelectObject(&BrushNew););Visual C+程序设计教程2022/2/22第第3 3章章 图形与文本图形与文本 24【例【例3.53.5】 编写一个单文档应用程序编写一个单文档应用程序Li3_5Li3_5,使用库存画,使用库存画笔和画刷在视图

20、中绘制图形。笔和画刷在视图中绘制图形。Visual C+程序设计教程2022/2/22第第3 3章章 图形与文本图形与文本 253.3.2 创建和使用自定义画笔创建和使用自定义画笔 如果要在设备环境中使用自己的画笔绘图,首先如果要在设备环境中使用自己的画笔绘图,首先需要需要创建创建一个指定风格的画笔,然后一个指定风格的画笔,然后选择选择所创建的画所创建的画笔,最后笔,最后还原还原画笔。画笔。1.1.创建画笔创建画笔 创建画笔的方法有两种:创建画笔的方法有两种:Visual C+程序设计教程2022/2/22第第3 3章章 图形与文本图形与文本 26(1)(1)定义画笔对象时直接创建定义画笔对象

21、时直接创建 CPen PenNew(PS_DASH,1,RGB(255,0,0); 笔的样式笔的样式 线的宽度线的宽度 线的颜色线的颜色(2)(2)先定义一个没有初始化的画笔对象,再调用先定义一个没有初始化的画笔对象,再调用CreatePenCreatePen( )( )函数创建指定画笔。函数创建指定画笔。 CPen Pen; pen.CreatePen(PS_DASH,1,RGB(255,0,0);Visual C+程序设计教程2022/2/22第第3 3章章 图形与文本图形与文本 27Visual C+程序设计教程2022/2/22第第3 3章章 图形与文本图形与文本 282.2.选择创建

22、的画笔选择创建的画笔 调用调用CDCCDC类的成员函数类的成员函数SelectOjectSelectOject( )( ),将创建的,将创建的画笔选入当前设备环境。选择新的画笔时应该保存以前画笔选入当前设备环境。选择新的画笔时应该保存以前的画笔对象。的画笔对象。例如:例如: CPen*PenOld; PenOld=pDC-SelectObject(&PenNew);选择新画笔选择新画笔保存原来的画笔保存原来的画笔Visual C+程序设计教程2022/2/22第第3 3章章 图形与文本图形与文本 293.3.还原画笔还原画笔 绘图完成后,调用绘图完成后,调用CDCCDC类的成员函数类的

23、成员函数SelectOjectSelectOject( )( )恢复设备环境以前的画笔工具,并通过调用恢复设备环境以前的画笔工具,并通过调用CGdiObjectCGdiObject类的成员函数类的成员函数DeleteObjectDeleteObject( )( )来删除画笔,释放来删除画笔,释放GDIGDI对对象所占的内存资源。象所占的内存资源。例如:例如:恢复设备环境恢复设备环境DC中原来的画笔:中原来的画笔: pDC-SelectObject(PenOld);删除创建的画笔:删除创建的画笔: PenNew.DeleteObject(); Visual C+程序设计教程2022/2/22第第

24、3 3章章 图形与文本图形与文本 30【例【例3.6】 编写一个单文档应用程序编写一个单文档应用程序Li3_6,绘制不,绘制不同样式、线宽及颜色的矩形。同样式、线宽及颜色的矩形。Visual C+程序设计教程2022/2/22第第3 3章章 图形与文本图形与文本 313.3.3 创建和使用自定义画刷创建和使用自定义画刷包括三个步骤包括三个步骤:创建画刷创建画刷:先构造一个没有初始化的先构造一个没有初始化的CBrushCBrush画刷对象,画刷对象,再调用再调用CBrushCBrush类的初始化成员函数创建定制的画刷工具。类的初始化成员函数创建定制的画刷工具。类型不同的画刷使用不同的函数实现类型

25、不同的画刷使用不同的函数实现。选择创建的画刷选择创建的画刷还原画刷。还原画刷。 CBrushCBrush类提供的创建函数中常用的有以下几个:类提供的创建函数中常用的有以下几个:Visual C+程序设计教程2022/2/22第第3 3章章 图形与文本图形与文本 32(1)(1)创建指定颜色的实心画刷函数创建指定颜色的实心画刷函数CreateSolidBrushCreateSolidBrush( )( )其原型为:其原型为: Bool CreateSolidBrush(COLORREF crColor); 例如创建一个红色的实心画刷:例如创建一个红色的实心画刷: CBrush brush; br

26、ush.CreateSolidBrush(RGB(255,0,0);Visual C+程序设计教程2022/2/22第第3 3章章 图形与文本图形与文本 33(2)(2)创建阴影画刷函数创建阴影画刷函数CreateHatchBrushCreateHatchBrush( )( ) 其原型为:其原型为:Bool CreateHatchBrush( int nIndex,COLORREF crColor); 参数参数nIndexnIndex用于指定阴影样式,它的值见下表。用于指定阴影样式,它的值见下表。 例如:例如: 创建一个具有水平和垂直交叉阴影线的红色画刷创建一个具有水平和垂直交叉阴影线的红色画

27、刷 CBrush brush; brush.CreateHatchBrush(HS_ CROSS,RGB(255,0,0);Visual C+程序设计教程2022/2/22第第3 3章章 图形与文本图形与文本 34 画刷的阴影样式画刷的阴影样式Visual C+程序设计教程2022/2/22第第3 3章章 图形与文本图形与文本 35(3)(3)创建位图画刷函数创建位图画刷函数CreatePatternBrushCreatePatternBrush( )( ) 采用采用8 8像素像素8 8像素的位图。像素的位图。例如:例如:CBitMap mybmp;mybmp.LoadBitMap(IDB_M

28、YBMP);CBrush brush;brush.CreatePatternBrush(&mybmp);先加载位图Visual C+程序设计教程2022/2/22第第3 3章章 图形与文本图形与文本 36【例【例3.7】编写一个单文档应用程序编写一个单文档应用程序Li3_7Li3_7,绘制不同颜色、,绘制不同颜色、不同阴影形式的填充矩形。不同阴影形式的填充矩形。Visual C+程序设计教程2022/2/22第第3 3章章 图形与文本图形与文本 373.4 3.4 处理文本处理文本 3.4.1 设置文本显示属性设置文本显示属性 在默认情况下输出文本时,字体颜色是黑色,在默认情况下输出文

29、本时,字体颜色是黑色,背景颜色是白色,背景模式为不透明模式。背景颜色是白色,背景模式为不透明模式。 通过调用通过调用CDCCDC类成员函数重新设置字体颜色、类成员函数重新设置字体颜色、背景颜色和文本对齐方式等文本显示属性,下表背景颜色和文本对齐方式等文本显示属性,下表是文本属性显示的常用函数。是文本属性显示的常用函数。Visual C+程序设计教程2022/2/22第第3 3章章 图形与文本图形与文本 38文本属性函数文本属性函数 Visual C+程序设计教程2022/2/22第第3 3章章 图形与文本图形与文本 391.1.设置背景模式设置背景模式 SetBkModeSetBkMode(

30、)( )函数原型为:函数原型为: int SetBkMode(int nBkMode); 其 中 ,其 中 , n B k M o d en B k M o d e 指 定 背 景 模 式指 定 背 景 模 式 , 其, 其 值值 是是OPAQUE(OPAQUE(不透明不透明) )或或TRANSPARENT(TRANSPARENT(透明透明) )。Visual C+程序设计教程2022/2/22第第3 3章章 图形与文本图形与文本 402.2.设置文本对齐方式设置文本对齐方式 SetTextAlignSetTextAlign( )( )函数改变文本对齐方式:函数改变文本对齐方式: UINT S

31、etTextAlign(UINT nFlags); 其中,其中,nFlagnFlag为下表中列出的标志的组合。为下表中列出的标志的组合。Visual C+程序设计教程2022/2/22第第3 3章章 图形与文本图形与文本 41文本对齐标志文本对齐标志 Visual C+程序设计教程2022/2/22第第3 3章章 图形与文本图形与文本 423.4.2 设置字体设置字体 字体也是一种字体也是一种GDIGDI对象,字体对象的创建、选择、对象,字体对象的创建、选择、使用和删除的步骤与其他使用和删除的步骤与其他GDIGDI对象类似。对象类似。 CFontCFont类提供的创建函数中常用的有以下几个:类

32、提供的创建函数中常用的有以下几个:Visual C+程序设计教程2022/2/22第第3 3章章 图形与文本图形与文本 431.CreatePointFont( )1.CreatePointFont( )BOOL CreatePointFont(int nPointSize,LPCTSTR lpszFaceName,CDC* pDC=NULL);参数说明:参数说明: nPointSize:字体大小,以字体大小,以1/101/10磅为单位;磅为单位; lpszFaceName:创建字体对象所使用的字体名称;创建字体对象所使用的字体名称; pDCpDC:指向一个设备环境对象。指向一个设备环境对象。

33、Visual C+程序设计教程2022/2/22第第3 3章章 图形与文本图形与文本 442.CreateFontIndirect( )2.CreateFontIndirect( )BOOL CreateFontIndirect(const LOGFONT *lpLogFont); 参数参数lpLogFontlpLogFont为指向为指向LOGFONTLOGFONT结构的指针。结构的指针。LOGFONTLOGFONT结结构用来说明一种字体的所有属性。构用来说明一种字体的所有属性。Visual C+程序设计教程2022/2/22第第3 3章章 图形与文本图形与文本 453.CreateFont(

34、 )3.CreateFont( )该函数包括大量参数,其原型为:该函数包括大量参数,其原型为:BOOL CreateFont(int nHeight;int nWidth;int nEscapement;int nOrientation;int nWeight;BYTE bItalic;BYTE bUnderline;BYTE cStrikeOut;BYTE nCharSet;BYTE nOutPreclsion;BYTE nClipPrecision;BYTE nQuality;BYTE nPitchAndFamily;LPCTSTR lpszFacename;)Visual C+程序设计教

35、程2022/2/22第第3 3章章 图形与文本图形与文本 46 可以选择库存字体来重新设置字体。当选择库存字可以选择库存字体来重新设置字体。当选择库存字体作为文本输出的字体时,无须创建字体对象,只需简体作为文本输出的字体时,无须创建字体对象,只需简单地调用成员函数单地调用成员函数CDC:SelectStockObjectCDC:SelectStockObject( )( ),将库,将库存字体对象选入设备环境。存字体对象选入设备环境。库存字体对象 说 明 ANSI_FIXED_FONT ANSI_VAR_FONT SYSTEM_FONT SYSTEM_FIXED_FONT DEVICE_DEFA

36、ULT_FONT OEM_FIXED_FONT ANSI 标准的等宽字体 ANSI 标准的非等宽字体 Windows 默认的非等宽系统字体 Windows 等宽系统字体 当前设备字体 与 OEM 相关的等宽字体 Visual C+程序设计教程2022/2/22第第3 3章章 图形与文本图形与文本 47【例【例3.8】 编写一个单文档的应用程序编写一个单文档的应用程序Li3_8Li3_8,采用不同的,采用不同的方法创建字体,并根据创建的字体输出不同的文本。方法创建字体,并根据创建的字体输出不同的文本。 Visual C+程序设计教程2022/2/22第第3 3章章 图形与文本图形与文本 483.

37、4.3 格式化文本格式化文本 文本的显示是以像素为单位,在绘制任何文文本的显示是以像素为单位,在绘制任何文本之前,需要精确地知道文本的详细属性,如高本之前,需要精确地知道文本的详细属性,如高度、宽度等,用来计算文本坐标。度、宽度等,用来计算文本坐标。 CDCCDC类提供了几个文本测量成员函数:类提供了几个文本测量成员函数:Visual C+程序设计教程2022/2/22第第3 3章章 图形与文本图形与文本 491.GetTextExtent( )1.GetTextExtent( ) 获得所选字体中指定字符串的宽度和高度。获得所选字体中指定字符串的宽度和高度。 CSize GetTextExte

38、nt(LPCTSTR lpszString,int nCount); 其中,其中,1pszString1pszString是字符串的指针,是字符串的指针,nCountnCount是所包是所包括的字符数。括的字符数。 返回值返回值CSizeCSize是包含两个成员的结构,是包含两个成员的结构,cxcx是字符串的是字符串的宽度,宽度,cycy是字符串的高度。是字符串的高度。Visual C+程序设计教程2022/2/22第第3 3章章 图形与文本图形与文本 502.GetTextMetrics( )2.GetTextMetrics( ) 获得当前字体获得当前字体TEXTMETRICTEXTMETR

39、IC结构的数据。结构的数据。 BOOL GetTextMetric(const TEXTMETRIC *lpTextMetric); 参数参数lpTextMetriclpTextMetric为指向结构为指向结构TEXTMETRICTEXTMETRIC的指针。的指针。TEXTMETRICTEXTMETRIC结构用来描述字体信息。结构用来描述字体信息。Visual C+程序设计教程2022/2/22第第3 3章章 图形与文本图形与文本 51【例【例3.9】 编写一个单文档的应用程序编写一个单文档的应用程序Li3_9Li3_9,采用不同,采用不同的格式输出文本串。的格式输出文本串。Visual C+

40、程序设计教程2022/2/22第第3 3章章 图形与文本图形与文本 523.4.4 常用文本输出函数常用文本输出函数 MFC CDCMFC CDC类中常用的文本输出函数有以下几种:类中常用的文本输出函数有以下几种:1.TextOut( )1.TextOut( ) 该函数使用当前设定的字体、颜色、对齐方式在指定位该函数使用当前设定的字体、颜色、对齐方式在指定位置上输出文本。置上输出文本。vitual BOOL TextOut(int x,int y,LPCTSTR lpszString,int nCount);或:或: BOOL TextOut(int x, int y,const Cstrin

41、g &str); 其中,参数其中,参数(x,y)(x,y)指定输出文本串的开始位置;参数指定输出文本串的开始位置;参数lpszStringlpszString和和strstr为输出的文本串;参数为输出的文本串;参数nCountnCount指定文本串指定文本串的长度。的长度。Visual C+程序设计教程2022/2/22第第3 3章章 图形与文本图形与文本 532.DrawText( )2.DrawText( ) 该函数在给定的矩形区域内输出文本,并可调整文本该函数在给定的矩形区域内输出文本,并可调整文本在矩形区域内的对齐方式以及对文本行进行换行处理等。在矩形区域内的对齐方式以及对文本

42、行进行换行处理等。函数原型为:函数原型为: Virtual int DrawText(LPCTSTR lpszString, int nCount,LPRECT lpRect,UINT nFormat);或:或: int DrawText(const CString&str,LPRECT lpRect,UINT nFormat); 其中,参数其中,参数lpszStringlpszString和和strstr为要输出的文本串,可以为要输出的文本串,可以使用换行符使用换行符“nn”;参数;参数nCountnCount指定文本串长度;参数指定文本串长度;参数lpRectlpRect指定用于显

43、示文本串的矩形区域;参数指定用于显示文本串的矩形区域;参数nFormatnFormat指定指定如何格式化文本串。如何格式化文本串。Visual C+程序设计教程2022/2/22第第3 3章章 图形与文本图形与文本 543.ExtTextOut( )3.ExtTextOut( ) 该函数的功能与该函数的功能与TextOutTextOut( )( )相似,但可以根据指定的相似,但可以根据指定的矩形区域裁剪文本串,并调整字符间距。函数原型为:矩形区域裁剪文本串,并调整字符间距。函数原型为:Virtual BOOL ExtTextOut(int x,int y,UINT nOptions,LPCRE

44、CT lpRect,LPCTSTR lpszString,UINT nCount,LPINTlpDxWidths);或:或:BOOL ExtTextOut(int x, int y,UINT nOptions,LPCRECT lpRect,const CString &str,LPINT lpDxWidths);4.TabbedTextOut( )4.TabbedTextOut( ) 该函数的功能与该函数的功能与TextOutTextOut( )( )相似,但可按指定的制表相似,但可按指定的制表间距扩展制表符。间距扩展制表符。Visual C+程序设计教程2022/2/22第第3 3章

45、章 图形与文本图形与文本 55【例例3.10】 编写一个单文档的应用程序编写一个单文档的应用程序Li3_10Li3_10,采用不同,采用不同的函数输出文本串。的函数输出文本串。Visual C+程序设计教程2022/2/22第第3 3章章 图形与文本图形与文本 563.5 3.5 位图位图 位图是一个由位构成的图像,它是由一系列位图是一个由位构成的图像,它是由一系列0 0和和1 1排排列而成的点阵结构。列而成的点阵结构。 WindowsWindows支持两种不同形式的位图:支持两种不同形式的位图:设备相关位图设备相关位图(Device Dependent Bitmap(Device Depen

46、dent Bitmap,DDB)DDB)设备无关位图设备无关位图(Device Independent Bitmap(Device Independent Bitmap,DIB)DIB)Visual C+程序设计教程2022/2/22第第3 3章章 图形与文本图形与文本 573.5.1 设备相关图设备相关图(DDB)和设备无关图和设备无关图(DIB) DDBDDB又称又称GDIGDI位图,它依赖于具体设备,只能存在于内位图,它依赖于具体设备,只能存在于内存中。存中。 DIBDIB是不依赖硬件的位图,因为它包含了创建是不依赖硬件的位图,因为它包含了创建DIBDIB位图位图时所在设备的颜色格式、分

47、辨率和调色板等信息。时所在设备的颜色格式、分辨率和调色板等信息。 DIBDIB位图不能直接显示,需要先转换为与设备相关的位图不能直接显示,需要先转换为与设备相关的格式,再由具体的设备显示。格式,再由具体的设备显示。DIBDIB位图通常以位图通常以BMPBMP后缀名的后缀名的文件形式存储在磁盘中,或者以资源的形式存在于文件形式存储在磁盘中,或者以资源的形式存在于EXEEXE或或DLLDLL文件中。文件中。Visual C+程序设计教程2022/2/22第第3 3章章 图形与文本图形与文本 583.5.2 位图操作函数位图操作函数 MFCMFC提供了大量的类和函数来处理位图的操作。提供了大量的类和

48、函数来处理位图的操作。1.1.创建创建DDBDDB函数函数 BOOL LoadBitmap(LPCTSTR lpszResourceName); BOOL LoadBitmap(UINT nlDResource); 其中,参数其中,参数lpszResourceName或或nlDResouree分别为分别为位图资源名称或位图资源标识。位图资源名称或位图资源标识。 该函数从资源中装入一幅位图,若载入成功,则返回该函数从资源中装入一幅位图,若载入成功,则返回值为真,否则返回值为假。值为真,否则返回值为假。Visual C+程序设计教程2022/2/22第第3 3章章 图形与文本图形与文本 59BOO

49、L CreateCompatibleBitmap(CDC* pDC,int nWidth,int nHeight); 其中参数其中参数pDCpDC指向一个设备环境,参数指向一个设备环境,参数nWidthnWidth和和nHeightnHeight以像素为单位,用来指定位图的宽度和高度。以像素为单位,用来指定位图的宽度和高度。 该函数创建一个与指定设备环境兼容的该函数创建一个与指定设备环境兼容的DDBDDB。若创建。若创建成功,函数返回值为真,否则为假。成功,函数返回值为真,否则为假。Visual C+程序设计教程2022/2/22第第3 3章章 图形与文本图形与文本 602.2.获取位图信息函

50、数获取位图信息函数 int GetBitmap(BITMAP* pBitMap); 该函数用来获取与该函数用来获取与DDBDDB有关的信息,参数有关的信息,参数pBitMappBitMap是是BITMAPBITMAP结构的指针。结构的指针。Visual C+程序设计教程2022/2/22第第3 3章章 图形与文本图形与文本 613.3.输出位图函数输出位图函数BOOL BitBlt(int x,int y,int nWidth,int nHeight,CDC* pSrcDC,intxSrc,int ySrc,DWORD dwRop); 该函数共有该函数共有8 8个参数个参数:x x、y y、n

51、WidthnWidth、nHeightnHeight: :定义当前设备环境的复制区域;定义当前设备环境的复制区域;pSrcDCpSrcDC: :为指向原设备环境对象的指针;为指向原设备环境对象的指针;xSrcxSrc、ySrcySrc: :为原位图的左上角坐标;为原位图的左上角坐标;dwRopdwRop: :定义了进行复制时的光栅操作方式。定义了进行复制时的光栅操作方式。Visual C+程序设计教程2022/2/22第第3 3章章 图形与文本图形与文本 62BOOL PatBlt(int x,int y,int nWidth,int nHeight,DWORD dwRop); 其中,参数其中,参数DwRopDwRop确定画刷类型

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论