图像编程与文字处理_第1页
图像编程与文字处理_第2页
图像编程与文字处理_第3页
图像编程与文字处理_第4页
图像编程与文字处理_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

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

文档简介

1、第第6 6章章 图像编程与文字处理图像编程与文字处理 精雕细琢,美化应用程序精雕细琢,美化应用程序教学内容教学内容6.1 6.1 图形设备接口图形设备接口6.2 6.2 常用绘图函数常用绘图函数6.3 6.3 绘图工具绘图工具6.4 6.4 字体与文字处理字体与文字处理6.5 6.5 位图位图6.6 6.6 综合实例综合实例建立宾馆管理系统的启动界面建立宾馆管理系统的启动界面6.7 6.7 小结小结 思考与练习思考与练习6.1 6.1 图形设备接口图形设备接口在在Windows程序中,应用程序的输出并不直接面向物理的设程序中,应用程序的输出并不直接面向物理的设备,如显示屏或打印机,而是针对一个

2、称之为设备环境备,如显示屏或打印机,而是针对一个称之为设备环境(Device Context)的逻辑设备进行操作,设备环境与实际)的逻辑设备进行操作,设备环境与实际设备之间的信息传送由设备之间的信息传送由Windows直接管理。直接管理。在在MFC应用程序中,所有的绘制调用均通过相应的设备环境对应用程序中,所有的绘制调用均通过相应的设备环境对象实现,设备环境对象封装了相应的象实现,设备环境对象封装了相应的Windows API功能,由功能,由一个一个32位的位的HDC类型句柄标识。在类型句柄标识。在MFC类库中,用类库中,用CDC类封类封装设备文本对象。装设备文本对象。6.1 6.1 图形设备

3、接口图形设备接口1、设备环境类(、设备环境类(CDC)CDC类直接继承自类直接继承自CObject类,它是设备上下文对象的基类。类,它是设备上下文对象的基类。CDC基类定基类定义了设备描述表对象,并且提供在显示器、打印机或义了设备描述表对象,并且提供在显示器、打印机或Windows用户区上绘用户区上绘图的方法,它封装了使用设备环境的图的方法,它封装了使用设备环境的GDI函数。函数。所有的绘图操作都是直接或间接运用了所有的绘图操作都是直接或间接运用了CDC的成员函数,这些函数有的进行的成员函数,这些函数有的进行设备描述表操作,有的是用来画图的,还有的函数是用来获取或设置绘图属设备描述表操作,有的

4、是用来画图的,还有的函数是用来获取或设置绘图属性,为映像和视图服务的。性,为映像和视图服务的。2、派生类、派生类CPaintDCCPaintDC是从是从CDC派生出来的设备描述表类,它常常在窗口的派生出来的设备描述表类,它常常在窗口的OnPaint函数中使用。查看函数中使用。查看MFC的源代码的源代码(StudioVC98MFCSRCviewcore.cpp)中的)中的OnPaint函数的函数的实现可以知道,实现可以知道,OnPaint函数首先构造一个函数首先构造一个CPaintDC对象,再调用对象,再调用OnPrepareDC()函数将其准备好,最后以这个准备好的函数将其准备好,最后以这个准

5、备好的CPaintDC对象对象指针为参数,来调用指针为参数,来调用OnDraw函数进行各种图形处理。函数进行各种图形处理。6.1 6.1 图形设备接口图形设备接口3、派生类、派生类CClientDC(管理客户区管理客户区)CClientDC类只能在客户区绘图。所谓客户区是指窗口区域中去掉边框、类只能在客户区绘图。所谓客户区是指窗口区域中去掉边框、标题栏、菜单栏、工具栏、状态栏等以外的部分,它是用户可以操作的区域。标题栏、菜单栏、工具栏、状态栏等以外的部分,它是用户可以操作的区域。例如打开例如打开Word文档将是将某个文档将是将某个.doc文件显示在其客户区域中。在使用文件显示在其客户区域中。在

6、使用CClientDC进行绘图时,一般要调用进行绘图时,一般要调用GetClientRect函数来获取客户区域函数来获取客户区域的大小。的大小。4、派生类、派生类CWindowDC(管理框架窗口管理框架窗口) CWindowDC类直接从类直接从CDC派生,它使调用和释放整个窗口(包括客户派生,它使调用和释放整个窗口(包括客户区和非客户区)的设备环境过程自动化。区和非客户区)的设备环境过程自动化。CWindowDC对象在构造时调用对象在构造时调用Windows API函数函数GetWindowDC, 在析构时调用相应的在析构时调用相应的API函数函数ReleaseDC,这意味着这意味着CWind

7、owtDC对象可访问对象可访问CWnd所指向的整个屏所指向的整个屏幕区域。幕区域。6.1 6.1 图形设备接口图形设备接口在选择在选择GDI对象进行绘图时,往往遵循着下列的步骤:对象进行绘图时,往往遵循着下列的步骤:(1) 在堆栈中定义一个在堆栈中定义一个GDI对象对象(如如CPen、CBrush对象对象),然后用相应的函数然后用相应的函数(如如CreatePen、CreateSolidBrush)创创建此建此GDI对象。对象。(2) 将构造的将构造的GDI对象选入当前设备环境中,但不要忘记将原对象选入当前设备环境中,但不要忘记将原来的来的GDI对象保存起来。对象保存起来。(3) 绘图结束后,

8、恢复当前设备环境中原来的绘图结束后,恢复当前设备环境中原来的GDI对象。对象。(4) 由于由于GDI对象是在堆栈中创建中,当程序结束后,框架会对象是在堆栈中创建中,当程序结束后,框架会自动删除程序创建的自动删除程序创建的GDI对象。对象。6.1 6.1 图形设备接口图形设备接口Windows的的GDI(graphics device interface)支持两种坐标系,即逻辑坐标支持两种坐标系,即逻辑坐标系和物理坐标系,分别连接应用程序和图形物理设备。物理坐标是指物理设备的坐标系和物理坐标系,分别连接应用程序和图形物理设备。物理坐标是指物理设备的坐标系,它的单位是真正的长度单位,有英寸(系,它

9、的单位是真正的长度单位,有英寸(in)和毫米()和毫米(mm)两种,它的原点在)两种,它的原点在屏幕的左上角,屏幕的左上角,X轴向右递增,轴向右递增,Y轴向下递增。逻辑坐标指的是在窗口下的坐标,逻轴向下递增。逻辑坐标指的是在窗口下的坐标,逻辑坐标的单位是逻辑像素。辑坐标的单位是逻辑像素。在在Windows系统中,总共有三种物理坐标(又叫设备坐标),分别是屏幕坐标、系统中,总共有三种物理坐标(又叫设备坐标),分别是屏幕坐标、用户区坐标、全窗口坐标。用户区坐标、全窗口坐标。1客户区坐标系统:客户区坐标系统是最常见的坐标系统,以窗口客户区左上角为客户区坐标系统:客户区坐标系统是最常见的坐标系统,以窗

10、口客户区左上角为原点(原点(0,0),主要用于窗口客户区绘图输出以及处理窗口的一些消息。鼠标消息),主要用于窗口客户区绘图输出以及处理窗口的一些消息。鼠标消息WM_LBUTTONDOWN、WM_MOUSEMOVE传给框架的消息参数以及传给框架的消息参数以及CDC一一些用于绘图的成员都是使用客户区坐标。些用于绘图的成员都是使用客户区坐标。2屏幕坐标系统:屏幕坐标系统是另一类常用的坐标系统,以屏幕左上角为原点屏幕坐标系统:屏幕坐标系统是另一类常用的坐标系统,以屏幕左上角为原点(0,0)。一些与窗口客户区不相关的函数均以屏幕坐标为单位,例如设置和取得)。一些与窗口客户区不相关的函数均以屏幕坐标为单位

11、,例如设置和取得光标位置的函数光标位置的函数SetCursorPos()和()和GetCursorPos();由于光标可以在任();由于光标可以在任何一个窗口之间移动,它不属于任何一个单一的窗口,因此使用屏幕坐标。弹出式菜何一个窗口之间移动,它不属于任何一个单一的窗口,因此使用屏幕坐标。弹出式菜单使用的也是屏幕坐标。另外,单使用的也是屏幕坐标。另外,CreateWindow()和()和MoveWindow()等函()等函数用于设置窗口相对于屏幕的位置,使用的也是屏幕坐标系统。数用于设置窗口相对于屏幕的位置,使用的也是屏幕坐标系统。3窗口坐标系统:窗口坐标系统以窗口左上角为坐标原点,它包含了窗口

12、控制菜单、窗口坐标系统:窗口坐标系统以窗口左上角为坐标原点,它包含了窗口控制菜单、标题栏等内容。一般情况下很少在窗口标题栏上绘图,因此这种坐标系统很少使用。标题栏等内容。一般情况下很少在窗口标题栏上绘图,因此这种坐标系统很少使用。6.1 6.1 图形设备接口图形设备接口在图形绘制操作中,常常需要使用在图形绘制操作中,常常需要使用MFC中的中的CPoint、CSize和和CRect等简单数据等简单数据类由于类由于CPoint(点点)、CSize(大小大小)和和CRect(矩形矩形)是对是对Windows的的POINT、SIZE和和RECT结构的封装,因此它们可以直接使用各自结构的数据成员,如下所

13、示:结构的封装,因此它们可以直接使用各自结构的数据成员,如下所示:typedef struct tagPOINT LONG x; / 点的点的x坐标坐标 LONG y; / 点的点的y坐标坐标 POINT;typedef struct tagSIZE LONG cx; /矩形的长度矩形的长度 LONG cy; /矩形的宽度矩形的宽度 SIZE; typedef struct tagRECT LONG left;/ 矩形左上角点的矩形左上角点的x坐标坐标 LONG top; / 矩形左上角点的矩形左上角点的y坐标坐标 LONG right; / 矩形右下角点的矩形右下角点的x坐标坐标 LONG

14、bottom; / 矩形右下角点的矩形右下角点的y坐标坐标 RECT;6.2 6.2 常用绘图函数常用绘图函数1、画点、画点 画点是最基本的绘图操作之一,它是通过调用画点是最基本的绘图操作之一,它是通过调用CDC:SetPixel或或CDC:SetPixelV 函数来实现的。这两个函数都是用来在指定的坐标上设置指定的函数来实现的。这两个函数都是用来在指定的坐标上设置指定的颜色,只不过颜色,只不过SetPixelV函数不需要返回实际像素点的函数不需要返回实际像素点的RGB值;正是因为这一点,值;正是因为这一点,函数函数SetPixelV要比要比SetPixel快得多。快得多。COLORREF S

15、etPixel( int x, int y, COLORREF crColor );COLORREF SetPixel( POINT point, COLORREF crColor );BOOL SetPixelV(int x, int y, COLORREF crColor);BOOL SetPixelV( POINT point, COLORREF crColor );其中参数其中参数point指定所绘制的点,指定所绘制的点,crColor指定画点所用的颜色。倘若要在屏幕的指定画点所用的颜色。倘若要在屏幕的(100,100)处画一个红色点,则代码为:)处画一个红色点,则代码为:pDC- S

16、etPixel(CPoint(100,100),RGB(255,0,0);实际显示像素的颜色未必等同于实际显示像素的颜色未必等同于crColor所指定的颜色值,因为有时受设备限制,不所指定的颜色值,因为有时受设备限制,不能显示能显示crColor所指定的颜色值,而只能取其近似值。与上述函数相对应的所指定的颜色值,而只能取其近似值。与上述函数相对应的GetPixel函数是用来获取指定点的颜色。函数是用来获取指定点的颜色。COLORREF GetPixel( int x, int y ) const;COLORREF GetPixel( POINT point ) const;6.2 6.2 常用

17、绘图函数常用绘图函数2、画线、画线画线也是特别常用的绘图操作之一。画线也是特别常用的绘图操作之一。CDC的的LineTo和和MoveTo函数就是用函数就是用来实现画线功能的两个函数,通过这两个函数的配合使用,可完成任何直线来实现画线功能的两个函数,通过这两个函数的配合使用,可完成任何直线和折线的绘制操作。和折线的绘制操作。CDC:MoveTo用来移动当前点到指定点,返回当前点的坐标。它有两种用来移动当前点到指定点,返回当前点的坐标。它有两种调用形式,其函数原型如下:调用形式,其函数原型如下:CPoint MoveTo(int x,int y);CPoint MoveTo(POINT point

18、);参数参数x为新位置的为新位置的x坐标,坐标,y为新位置的为新位置的y坐标坐标; point为新位置的坐标为新位置的坐标.CDC:LineTo函数用来绘制一条从当前点到指定点的直线,返回是否绘制函数用来绘制一条从当前点到指定点的直线,返回是否绘制成功的标志,其原型如下:成功的标志,其原型如下:BOOL LineTo( int x, int y );BOOL LineTo( POINT point );参数参数x为指定点的为指定点的x坐标,坐标,y为指定点的为指定点的y坐标坐标; point为指定点的坐标为指定点的坐标.6.2 6.2 常用绘图函数常用绘图函数3、折线、折线除了除了LineTo

19、函数可用来画线之外,函数可用来画线之外,CDC中还提供了一系列用于画各种折线中还提供了一系列用于画各种折线的函数。它们主要是的函数。它们主要是Polyline、PolyPolyline和和PolylineTo。这三个函。这三个函数中,数中,Polyline和和PolyPolyline既不使用当前位置,也不更新当前位置;既不使用当前位置,也不更新当前位置;而而PolylineTo总是把当前位置作为起始点,并且在折线画完之后,还把折总是把当前位置作为起始点,并且在折线画完之后,还把折线终点所在位置设为新的当前位置。这几个函数的原型如下:线终点所在位置设为新的当前位置。这几个函数的原型如下:BOOL

20、 Polyline( LPPOINT lpPoints, int nCount );BOOL PolylineTo( const POINT* lpPoints, int nCount );这两个函数用来画一系列连续的折线,参数这两个函数用来画一系列连续的折线,参数lpPoints是是POINT或或CPoint的顶点数组;的顶点数组;nCount表示数组中顶点的个数,它至少为表示数组中顶点的个数,它至少为2。BOOL PolyPolyline( const POINT* lpPoints, const DWORD* lpPolyPoints, int nCount );此函数可用来绘制多条折线

21、。其中此函数可用来绘制多条折线。其中lpPoints同前定义,同前定义,lpPolyPoints表表示各条折线所需的顶点数,示各条折线所需的顶点数,nCount表示折线的数目。表示折线的数目。6.2 6.2 常用绘图函数常用绘图函数CDC提供的提供的Rectangle和和RoundRect函数分别用于矩形和圆角矩形的绘函数分别用于矩形和圆角矩形的绘制,它们的原型如下:制,它们的原型如下:BOOL Rectangle( int x1, int y1, int x2, int y2 );BOOL Rectangle( LPCRECT lpRect );BOOL RoundRect( int x1,

22、 int y1, int x2, int y2, int x3, int y3 );BOOL RoundRect( LPCRECT lpRect, POINT point );参数参数lpRect的成员的成员left,top,right,bottom分别表示分别表示x1,y1,x2,y2,point的成员的成员x,y分别表示分别表示x3,y3;而;而x1,y1表示矩形的左上角坐标,表示矩形的左上角坐标,x2,y2表示矩形的右上角坐标,表示矩形的右上角坐标,x3,y3表示绘制圆角的椭圆大小,表示绘制圆角的椭圆大小, 6.2 6.2 常用绘图函数常用绘图函数p通过调用通过调用CDC的的Arc函数可

23、以画一条椭圆弧线或者整个椭圆。这个椭圆的函数可以画一条椭圆弧线或者整个椭圆。这个椭圆的大小是由其外接矩形大小是由其外接矩形(本身并不可见本身并不可见)所决定的。所决定的。Arc函数的原型如下:函数的原型如下:BOOL Arc( int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4 );BOOL Arc( LPCRECT lpRect, POINT ptStart, POINT ptEnd );p使用使用CDC的成员函数的成员函数Ellipse,可以使用当前笔绘制一个用当前画刷填充,可以使用当前笔绘制一个用当前画刷填充的椭圆

24、或圆。其函数原型如下:的椭圆或圆。其函数原型如下:BOOL Ellipse(int x1, int y1, int x2, int y2 );BOOL Ellipse( LPCRECT lpRect );6.3 6.3 绘图工具绘图工具p画笔是最简单的一种绘图工具,同时也是最重要的一种绘图对象。在现实画笔是最简单的一种绘图工具,同时也是最重要的一种绘图对象。在现实世界中世界中,可以用不同的笔产生不同的线。这正如绘图用的彩笔、不同颜色笔可以用不同的笔产生不同的线。这正如绘图用的彩笔、不同颜色笔产生不同颜色的线。产生不同颜色的线。Windows也是利用这种面向对象的描述事物的方法,也是利用这种面向

25、对象的描述事物的方法,把笔作为一个对象,和现实世界一样,不同的笔产生不同的线。把笔作为一个对象,和现实世界一样,不同的笔产生不同的线。p一个画笔通常具有宽度、风格和颜色三种属性。画笔的宽度用来确定所画一个画笔通常具有宽度、风格和颜色三种属性。画笔的宽度用来确定所画的线条宽度,它是用设备单位表示的,默认的画笔宽度是一个像素单位。画的线条宽度,它是用设备单位表示的,默认的画笔宽度是一个像素单位。画笔的颜色确定了所画的线条颜色。画笔的风格确定了所绘图形的线型,它通笔的颜色确定了所画的线条颜色。画笔的风格确定了所绘图形的线型,它通常有实线、虚线、点线、点划线、双点划线、不可见线和内框线等七种风格。常有

26、实线、虚线、点线、点划线、双点划线、不可见线和内框线等七种风格。 6.3 6.3 绘图工具绘图工具1、画笔的创建、画笔的创建创建一个修饰画笔,可以使用创建一个修饰画笔,可以使用CPen类的类的CreatePen函数,其原型如下:函数,其原型如下: BOOL CreatePen( int nPenStyle, int nWidth, COLORREF crColor );参数参数nPenStyle、nWidth、crColor分别用来指定画笔的风格、宽度和颜色。此分别用来指定画笔的风格、宽度和颜色。此外,还有一个外,还有一个CreatePenIndirect函数也是用来创建画笔对象,它的作用与函

27、数也是用来创建画笔对象,它的作用与CreatePen函数是完全一样的,只是画笔的三个属性不是直接出现在函数参数中,函数是完全一样的,只是画笔的三个属性不是直接出现在函数参数中,而是通过一个而是通过一个LOGPEN结构间接地给出。结构间接地给出。 BOOL CreatePenIndirect( LPLOGPEN lpLogPen );此函数用由此函数用由LOGPEN结构指针指定的相关参数创建画笔,结构指针指定的相关参数创建画笔,LOGPEN结构如下:结构如下:typedef struct tagLOGPEN UINT lopnStyle;/ 画笔风格,同上画笔风格,同上 POINT lopnWi

28、dth;/ POINT结构的结构的y不起作用不起作用,而用而用x表示画笔宽度表示画笔宽度 COLORREF lopnColor;/ 画笔颜色画笔颜色 LOGPEN;6.3 6.3 绘图工具绘图工具2、使用画笔、使用画笔在在VC+.NET,通常按照如下步骤来使用画笔:,通常按照如下步骤来使用画笔:(1)声明)声明CPen对象。对象。(2)初始化画笔。通过调用)初始化画笔。通过调用CreatePen成员函数可以初始化笔。成员函数可以初始化笔。(3)将新建的画笔对象选进设备场景中,同时保存原画笔对象的指针:)将新建的画笔对象选进设备场景中,同时保存原画笔对象的指针: pOldPen=pDC-Sele

29、ctObject(&pen);(4)调用绘图函数生成图形。)调用绘图函数生成图形。(5)选择设备场景的原有笔对象。)选择设备场景的原有笔对象。3、画笔工具的操作示例、画笔工具的操作示例 6.3 6.3 绘图工具绘图工具1、画刷的属性、画刷的属性画刷的属性通常包括填充色、填充图案和填充样式三种。画刷的填充色和画画刷的属性通常包括填充色、填充图案和填充样式三种。画刷的填充色和画笔颜色一样,都是使用笔颜色一样,都是使用COLORREF颜色类型,画刷的填充图案通常是用户颜色类型,画刷的填充图案通常是用户定义的定义的8 8位图,而填充样式往往是位图,而填充样式往往是CDC内部定义的一些特性,它们

30、都是内部定义的一些特性,它们都是以以HS_为前缀的标识为前缀的标识.2、画刷的创建、画刷的创建CBrush类根据画刷属性提供了相应的创建函数,例如创建填充色画刷和填类根据画刷属性提供了相应的创建函数,例如创建填充色画刷和填充样式画刷的函数为充样式画刷的函数为CreateSolidBrush和和CreateHatchBrush,它们,它们的原型如下:的原型如下:BOOL CreateSolidBrush( COLORREF crColor ); / 创建填充色画刷创建填充色画刷BOOL CreateHatchBrush( int nIndex, COLORREF crColor ); / 创建填

31、充样式画刷创建填充样式画刷其中,其中,nIndex用来指定画刷的内部填充样式,而用来指定画刷的内部填充样式,而crColor表示画刷的填充表示画刷的填充色。色。与画笔相类似,也有一个与画笔相类似,也有一个LOGBRUSH 逻辑结构用于画刷属性的定义,并逻辑结构用于画刷属性的定义,并通过通过 CBrush的成员函数的成员函数CreateBrushIndirect来创建,其原型如下:来创建,其原型如下:BOOL CreateBrushIndirect( const LOGBRUSH* lpLogBrush );6.3 6.3 绘图工具绘图工具3、画刷的使用、画刷的使用在在VC+.NET,通常按照如

32、下步骤来使用画刷:,通常按照如下步骤来使用画刷:(1)生成)生成CBrush的实例。刷子以多种样式和颜色出现在的实例。刷子以多种样式和颜色出现在CBrush:CBrush(): CBrush( ); CBrush( COLORREF crColor ); CBrush( int nIndex, COLORREF crColor );上述函数的参数上述函数的参数crColor指定刷子颜色;指定刷子颜色;nIndex参数指定刷子图案,其值参数指定刷子图案,其值如表如表8.7所示。所示。(2)调用相应的成员函数初始化刷子。)调用相应的成员函数初始化刷子。(3)将所创建的画刷选入设备环境,同时保存原画

33、刷对象的指针。)将所创建的画刷选入设备环境,同时保存原画刷对象的指针。(4)调用绘图函数生成图形。)调用绘图函数生成图形。(5)恢复原先设备环境中的画刷。)恢复原先设备环境中的画刷。 6.3 6.3 绘图工具绘图工具3、画刷的使用、画刷的使用 6.3 6.3 绘图工具绘图工具 6.4 6.4 字体与文字处理字体与文字处理字体的属性有很多,但其主要属性有字样、风格和尺寸三个。字样是字符书字体的属性有很多,但其主要属性有字样、风格和尺寸三个。字样是字符书写和显示时表现出的特定模式,例如,对于汉字,通常有宋体、楷体、仿宋、写和显示时表现出的特定模式,例如,对于汉字,通常有宋体、楷体、仿宋、黑体、隶书

34、以及幼圆等多种字样。字体风格主要表现为字体的粗细和是否倾黑体、隶书以及幼圆等多种字样。字体风格主要表现为字体的粗细和是否倾斜等特点。字体尺寸是用来指定字符所占区域的大小,通常用字符高度来描斜等特点。字体尺寸是用来指定字符所占区域的大小,通常用字符高度来描述。字体尺寸可以取毫米或英寸作为单位,但为了直观起见,也常常采用一述。字体尺寸可以取毫米或英寸作为单位,但为了直观起见,也常常采用一种称为种称为“点点”的单位,一点约折合为的单位,一点约折合为1/72英寸。对于汉字,还常用英寸。对于汉字,还常用“号号”数来表示字体尺寸,初号字最大,以下依次为小初、一号、小一、二号、小数来表示字体尺寸,初号字最大

35、,以下依次为小初、一号、小一、二号、小二、二、,如此类推,字号越大,字体尺寸越小。,如此类推,字号越大,字体尺寸越小。6.4 6.4 字体与文字处理字体与文字处理在在VC+.NET中,创建字体需要调用中,创建字体需要调用CFont类的成员函数类的成员函数CreateFontIndirect或或CreatePointFont Indirect来初始化。来初始化。创建字体函数创建字体函数CFont类的字体创建成员函数的原型为:类的字体创建成员函数的原型为:BOOL CreateFont( int nHeight, int nWidth, int nEscapement, int nOrientat

36、ion, int nWeight, BYTE bItalic, BYTE bUnderline,BYTE cStrikeOut,BYTE nCharSet, BYTE nOutPrecision,BYTE nClipPrecision, BYTE nQuality, BYTE nPitchAndFamily, LPCTSTR lpszFaceName );BOOL CreateFontIndirect(const LOGFONT* lpLogFont );BOOL CreatePointFont( int nPointSize, LPCTSTR lpszFaceName, CDC* pDC =

37、 NULL );BOOL CreatePointFontIndirect( const LOGFONT* lpLogFont, CDC* pDC = NULL );其中其中CreatePointFont提供了创建字体的一种简单方法:提供了创建字体的一种简单方法:nPointSize为字体的大小,以为字体的大小,以0.1点(像素点(像素/墨点墨点/磅数)为单位磅数)为单位lpszFaceName为字体名称字符串的指针为字体名称字符串的指针若若pDC非空,则系统会将设备单位点自动转换为非空,则系统会将设备单位点自动转换为pDC中的映射模式所指定的逻辑单中的映射模式所指定的逻辑单位。位。6.4 6.

38、4 字体与文字处理字体与文字处理文本输出函数文本输出函数文本的最终输出不仅依赖于文本的字体,而且还跟文本的颜色、对齐方式等文本的最终输出不仅依赖于文本的字体,而且还跟文本的颜色、对齐方式等有很大关系。有很大关系。CDC类提供了四个输出文本的成员函数:类提供了四个输出文本的成员函数:TextOut、ExtTextOut、DrawText和和TabbedTextOut。virtual BOOL TextOut( int x, int y, LPCTSTR lpszString, int nCount );BOOL TextOut( int x, int y, const CString&

39、str );virtual CSize TabbedTextOut( int x, int y, LPCTSTR lpszString,int nCount, int nTabPositions, LPINT lpnTabStopPositions, int nTabOrigin );CSize TabbedTextOut( int x, int y, const CString& str, int nTabPositions, LPINT lpnTabStopPositions, int nTabOrigin );virtual int DrawText( LPCTSTR lpszS

40、tring, int nCount, LPRECT lpRect, UINT nFormat );int DrawText( const CString& str, LPRECT lpRect, UINT nFormat );6.4 6.4 字体与文字处理字体与文字处理1、设置文本的背景色、设置文本的背景色缺省时,在绘制图形或者输出文本时,背景颜色是白色。可以使用缺省时,在绘制图形或者输出文本时,背景颜色是白色。可以使用CDC的成员函数的成员函数SetBkColor函数来设置新的背景颜色,函数原型为:函数来设置新的背景颜色,函数原型为:virtual COLORREF SetBkCol

41、or(COLORREF crcolor);2、控制文本的背景色、控制文本的背景色 背景模式可用函数背景模式可用函数SetBkMode来设置,它设置当前的背景模式并返回原来的背景来设置,它设置当前的背景模式并返回原来的背景模式,该函数的原型为:模式,该函数的原型为: int SetBkMode(int nBkMode); 参数参数nkbmode指定背景模式,其值可以是指定背景模式,其值可以是OPAQUE或者或者TRANSPARENT,如果值为如果值为OPAQUE,则显示时背景都改变为当前背景颜色。如果值为,则显示时背景都改变为当前背景颜色。如果值为TRANSPARENT,则不改变背景颜色,此时,任何,则不改变背景颜色,此时,任何SetBkColor函数调用都无函数调用都无效,缺省的背景模式为效,缺省的背景模式为OPAQUE。 3、设置文本的排列方式、设置文本的排列方式 在文本显示时遇到的另一个问题是文本的排列方式,它控制文本和给定点的相对在文本显示时遇到的另一个问题是文本的排列方式,它控制文本和给定点的相对位置。在一个图形中加字符说明时,常常知道一个字符串的某一个边界,如左边位置。在一个图形中加字符说明时,常常知道一个字符串的某一个边界,如左边界不应超过某个位置,或右边界不应超过某个位置,或显示的几

温馨提示

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

最新文档

评论

0/150

提交评论