GetTextMetrics与GetTextExtent的区别

时间:2024-01-09 12:48:08

GetTextMetrics:获取当前字体的信息

GetTextExtent:获取特定的字符串在屏幕上所占的宽度和高度

CDC::GetTextMetrics

作用:

返回当前设备描述表中的当前所用的字体的信息

函数原型:

BOOL GetTextMetrics(
   LPTEXTMETRIC lpMetrics 
) const;

参数: 
lpMetrics (是一个指针)
返回指向TEXTMETRIC 结构的一个数据。

返回值:
非零值成功

要求: 
包含头文件: afxwin.h

CDC::GetTextExtent
Call this member function to compute the width and height of a line of text using the current font to determine the dimensions.
调用这个函数,返回用当前字体写下的一行字符串的高度和宽度

函数原型:
CSize GetTextExtent(
   LPCTSTR lpszString,
   int nCount 
) const;

CSize GetTextExtent(
   const CString& str 
) const;

参数 
lpszString

指向一个字符串指针,也可以传递一个字符串对象。
nCount

指定字符在字符串中的数目
str

一个字符串对象,包含指定的字符。
返回值:

以逻辑单位返回字符串的尺寸,保存在一个CSize对象中

要求:包含头文件 afxwin.h

如果使用的不是系统字体而是其他字体,则在调用GetTextExtent之前将字体选进设备上下文中是很重要的,否则计算高度和宽度时将依据

系统字体,由此得出的结果当然是不正确的。

想得到当前DC中字体的信息,可以用GetTextMetrics,一般用得多的是取得字体高度。   
GetTextExtent得到给定字符串的尺寸:高和宽,对具体的文字是准确的输出占用的尺寸。

//////////////////////////////////////////////////////////////////////////////////////////////

API之文本和字体函数

AddFontResource 在Windows系统中添加一种字体资源 
CreateFont 用指定的属性创建一种逻辑字体 
CreateFontIndirect 用指定的属性创建一种逻辑字体 
CreateScalableFontResource 为一种TureType字体创建一个资源文件,以便能用API函数AddFontResource将其加入Windows系统 
DrawText 将文本描绘到指定的矩形中 
DrawTextEx 与DrawText相似,只是加入了更多的功能 
EnumFontFamilies 列举指定设备可用的字体 
EnumFontFamiliesEx 列举指定设备可用的字体 
EnumFonts 列举指定设备可用的字体 
ExtTextOut 经过扩展的文本描绘函数。也请参考SetTextAlign函数 
GetAspectRatioFilterEx 用SetMapperFlags要求Windows只选择与设备当前纵横比相符的光栅字体时,本函数可判断纵横比大小 
GetCharABCWidths 判断TureType字体中一个或多个字符的A-B-C大小 
GetCharABCWidthsFloat 查询一种字体中一个或多个字符的A-B-C尺寸 
GetCharacterPlacement 该函数用于了解如何用一个给定的字符显示一个字串 
GetCharWidth 调查字体中一个或多个字符的宽度 
GetFontData 接收一种可缩放字体文件的数据
GetFontLanguageInfo 返回目前选入指定设备场景中的字体的信息 
GetGlyphOutline 取得TureType字体中构成一个字符的曲线信息 
GetKerningPairs 取得指定字体的字距信息 
GetOutlineTextMetrics 接收与TureType字体内部特征有关的详细信息 
GetRasterizerCaps 了解系统是否有能力支持可缩放的字体 
GetTabbedTextExtent 判断一个字串占据的范围,同时考虑制表站扩充的因素 
GetTextAlign 接收一个设备场景当前的文本对齐标志 
GetTextCharacterExtra 判断额外字符间距的当前值 
GetTextCharset 接收当前选入指定设备场景的字体的字符集标识符 
GetTextCharsetInfo 获取与当前选定字体的字符集有关的详细信息 
GetTextColor 判断当前字体颜色。通常也称为“前景色” 
GetTextExtentExPoint 判断要填入指定区域的字符数量。也用一个数组装载每个字符的范围信息 
GetTextExtentPoint 判断一个字串的大小(范围) 
GetTextFace 获取一种字体的字样名 
GetTextMetrics 获取与选入一种设备场景的物理字体有关的信息 
GrayString 描绘一个以灰色显示的字串。通常由Windows用于标识禁止状态 
PolyTextOut 描绘一系列字串 
RemoveFontResource 从Windows系统中删除一种字体资源 
SetMapperFlags Windows对字体进行映射时,可用该函数选择与目标设备的纵横比相符的光栅字体 
SetTextAlign 设置文本对齐方式,并指定在文本输出过程中使用设备场景的当前位置 
SetTextCharacterExtra 描绘文本的时候,指定要在字符间插入的额外间距 
SetTextColor 设置当前文本颜色。这种颜色也称为“前景色” 
SetTextJustification 通过指定一个文本行应占据的额外空间,可用这个函数对文本进行两端对齐处理 
TabbedTextOut 支持制表站的一个文本描绘函数 
TextOut 文本绘图函数

////////////////////////////////////////////////////////////////////////////////////////////////

TEXTMETRIC  TEXTMETRIC是在WINGDI.H中定义的型态的结构。TEXTMETRIC结构有20个栏位:
  typedef struct tagTEXTMETRIC { // tm 
  LONG tmHeight; //字符高度
  LONG tmAscent; //字符上部高度(基线以上)
  LONG tmDescent; //字符下部高度(基线以下)
  LONG tmInternalLeading; //由tmHeight定义的字符高度的顶部空间数目
  LONG tmExternalLeading; //加在两行之间的空间数目
  LONG tmAveCharWidth; //平均字符宽度
  LONG tmMaxCharWidth; //最宽字符的宽度
  LONG tmWeight; //字体的粗细轻重程度
  LONG tmOverhang; //加入某些拼接字体上的附加高度
  LONG tmDigitizedAspectX; //字体设计所针对的设备水平方向
  LONG tmDigitizedAspectY; //字体设计所针对的设备垂直方向
  BCHAR tmFirstChar; //为字体定义的第一个字符
  BCHAR tmLastChar; //为字体定义的最后一个字符
  BCHAR tmDefaultChar; //字体中所没有字符的替代字符
  BCHAR tmBreakChar; //用于拆字的字符
  BYTE tmItalic; //字体为斜体时非零
  BYTE tmUnderlined; //字体为下划线时非零
  BYTE tmStruckOut; //字体被删去时非零
  BYTE tmPitchAndFamily; //字体间距(低4位)和族(高4位)
  BYTE tmCharSet; //字体的字符集
  } TEXTMETRIC;
  TEXTMETRIC类型的变量用于存储装置字体结构信息(上诉变量),在窗口中输出文字时需要用到上诉变量。
  要获得TEXTMETRIC类型变量的值可以用GetTextMetrics(HDC,LPTEXTMETRIC)函数。
  运用例子如下:
  TEXTMETRIC tm;
  GetTextMetrics(hdc,&tm);