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);

GetTextMetrics与GetTextExtent的区别的更多相关文章

  1. GDI基础(2):绘制文本

    1.TextOut()和DrawText()函数 CDC::TextOut()在窗口的指定位置处输出文本,函数声明: virtual BOOL TextOut(int x, int y, LPCTST ...

  2. c#与java的区别

    经常有人问这种问题,用了些时间java之后,发现这俩玩意除了一小部分壳子长的还有能稍微凑合上,基本上没什么相似之处,可以说也就是马甲层面上的相似吧,还是比较短的马甲... 一般C#多用于业务系统的开发 ...

  3. jquery和Js的区别和基础操作

    jqery的语法和js的语法一样,算是把js升级了一下,这两种语法可以一起使用,只不过是用jqery更加方便 一个页面想要使用jqery的话,先要引入一下jqery包,jqery包从网上下一个就可以, ...

  4. 【原】nodejs全局安装和本地安装的区别

    来微信支付有2年多了,从2年前的互联网模式转变为O2O模式,主要的场景是跟线下的商户去打交道,不像以往的互联网模式,有产品经理提需求,我们帮忙去解决问题. 转型后是这样的,团队成员更多需要去寻找业务的 ...

  5. 探究@property申明对象属性时copy与strong的区别

    一.问题来源 一直没有搞清楚NSString.NSArray.NSDictionary--属性描述关键字copy和strong的区别,看别人的项目中属性定义有的用copy,有的用strong.自己在开 ...

  6. X86和X86_64和X64有什么区别?

    x86是指intel的开发的一种32位指令集,从386开始时代开始的,一直沿用至今,是一种cisc指令集,所有intel早期的cpu,amd早期的cpu都支持这种指令集,ntel官方文档里面称为&qu ...

  7. Java中Comparable与Comparator的区别

    相同 Comparable和Comparator都是用来实现对象的比较.排序 要想对象比较.排序,都需要实现Comparable或Comparator接口 Comparable和Comparator都 ...

  8. MySQL中interactive_timeout和wait_timeout的区别

    在用mysql客户端对数据库进行操作时,打开终端窗口,如果一段时间没有操作,再次操作时,常常会报如下错误: ERROR (HY000): Lost connection to MySQL server ...

  9. 设置line-height:1.5和line-height:150%或者line-height:150px的区别

    直接正题: 看一下line-height可能的值: 其实可以分为两类: (1)不带单位的(如line-height:1.5),这种是推荐使用的: (2)带单位的(如line-heigth:30px/1 ...

随机推荐

  1. CentOS下多网卡绑定多IP段时导致只有一个会通的问题解决

    原因:Linux默认开启了反向路由检查导致的,比如说外面访问eth0的网卡,而网关在eth1上,又或者从eth0出的流量,而网关在eth1上,此时会检查到网关不在同一个网卡上导致出不去,进不来的问题. ...

  2. 在Win7中用ftp的方法

    我的电脑是Win7  32位操作系统,之前一直没有成功使用过ftp 之初以为是ftp客户端的问题,换了几个软件都不行,然后换我的一台vps服务器(win2003)连接同一个ftp服务器可以正常连接使用 ...

  3. HappyJTAG2 - JTAG AND SPI AVR8 interface EMBEDDED JTAG ! EMBEDDED SPI !

    New version released ! V2.45 (Check version list for details) This construction is based on HappyJTA ...

  4. CF330 C. Purification 认真想后就成水题了

    C. Purification time limit per test 1 second memory limit per test 256 megabytes input standard inpu ...

  5. 导出文件在IE和火狐中文件名乱码问题的解决

    $ua = $_SERVER["HTTP_USER_AGENT"]; $filename = "客户数据.xls"; $encoded_filename = u ...

  6. Managing DbContext the right way with Entity Framework 6: an in-depth guide by mehdime

    UPDATE: the source code for DbContextScope is now available on GitHub: DbContextScope on GitHub. A b ...

  7. Opencv2教程一:图像变换之阈值二值threshold

    网名:无名   QQ:16349023 email:mengwzy@qq.com 曾经非常少写教程,写的可能有点乱希望大对家有帮助 threshold 方法是通过遍历灰度图中点.将图像信息二值化,处理 ...

  8. Linux内存管理学习1 —— head.S中的段页表的建立

    作者 彭东林 pengdonglin137@163.com 平台 TQ2440 Qemu+vexpress-ca9 Linux-4.10.17 概述 在Linux自解压完毕后,开始执行arch/arm ...

  9. ASP.NET MVC与Sql Server交互,把字典数据插入数据库

    在"ASP.NET MVC与Sql Server交互, 插入数据"中,在Controller中拼接sql语句.比如: _db.InsertData("insert int ...

  10. 使用Coding4Fun工具包

    Coding4Fun是一款很受WP开发者喜爱的开源类库,对于开发者来说,Coding4Fun上手很简单.只要从CodePlex下载Coding4Fun工具包,下载完成后,解压文件到一个文件夹中,里面有 ...