2024年3月21日发(作者:)
第9章 GDI编程2—文字、位图与图标
与DOS等传统字符界面用点阵模板显示文字不同,GUI中的文字一般是利用轮廓字体
中的控制点数据经计算后再绘制出来的。Windows中的文字,采用的是基于二次贝塞尔曲线
的TrueType轮廓字体(字体文件为*.TTF)。MFC中的字体类为CFont,在字体对象选入DC
后,可用TextOut等函数进行文字的绘制输出。
位图是指由像素阵列组成的数字化点阵图像,是GUI的基本元素。位图可分成与设备
相关和无关的两类,分别用于图像的显示和存储,对应的MFC类分别为CBitmap和CImage。
图标是一类大小固定的方型小位图,用于代表应用程序或文档子窗口。为了满足不同显
示设备和不同使用目的的需要,在一个程序的图标资源中,一般包含多个不同大小和颜色位
数的图像。MFC为应用程序提供了默认的图标,可用资源编辑器对其进行修改。
9.1 输出文本
一般使用CDC类的TextOut等函数,采用DC中的当前字体和文本颜色等来输出文本。
还可用SetTextAlign函数来设置文本的对齐方式,并分别用SetTextColor和SetBkColor函数
来设置文本的前景和背景颜色。
9.1.1 文本输出函数
在CDC类中,封装了多种文本输出函数,它们都是使用当前的字体、文本颜色和背景
颜色,在屏幕或打印机上输出文本(绘制文字)。
常用的文本输出函数有基本的TextOut、限定矩形区域的DrawText和可裁减与调字间距
之扩展的ExtTextOut,其中最常用的是TextOut函数。
1.TextOut
TextOut的函数原型为:
virtual BOOL TextOut( int x, int y, LPCTSTR lpszString, int nCount );
BOOL TextOut( int x, int y, const CString& str );
其中,x与y为显示串的左上角坐标,lpszString或str为要显示的文本串,nCount为串lpszString
1
中的字符数。例如:
pDC->TextOut(10, 30, L"Test text");
2.DrawText
DrawText的函数原型为:
virtual int DrawText( LPCTSTR lpszString, int nCount, LPRECT lpRect, UINT nFormat );
int DrawText( const CString& str, LPRECT lpRect, UINT nFormat );
其中,lpszString或str为要显示的文本串,nCount为串lpszString中的字符数,*lpRect为指
定的显示区域,nFormat为显示格式,可取表9-1中值的位或“|”组合。
表9-1 文本显示格式nFormat的常用取值
符号常量
DT_TOP
DT_LEFT
DT_CENTER
DT_RIGHT
DT_VCENTER
DT_BOTTOM
DT_WORDBREAK
DT_SINGLELINE
DT_EXPANDTABS
DT_TABSTOP
DT_NOCLIP
数值
0
0
1
2
4
8
0x10
0x20
0x40
0x80
0x100
含义
文本顶对齐,必需与DT_SINGLELINE.同时使用
居左显示文本
水平居中显示文本
居右显示文本
垂直居中显示文本
文本底对齐,必需与DT_SINGLELINE.同时使用
文本行超过矩形区域的宽时换行
单行显示文本,忽略回车和换行符
扩展Tab字符(默认为8个字符宽)
设置Tab的字符位数,该数放在nFormat的高位字节中
不剪裁(可提高显示速度)
在行高中包含字体的扩展头(通常不包含)
计算并调整矩形的宽与高
终止对表示加下划线的前缀字符&的处理
DT_EXTERNALLEADING 0x200
DT_CALCRECT
DT_NOPREFIX
DT_INTERNAL
0x400
0x800
0x1000 使用系统字体计算文本规格
2


发布评论