获取单个字符尺寸和字符串尺寸

原文链接: http://my.oschina.net/ypimgt/blog/62354

一、获取字符串尺寸用:GetTextExtentPoint32。

SIZE *se=new SIZE;
CDC MemDC; //首先定义一个显示设备对象
MemDC.SelectObject(font);
......其它关于MemDC的操作
GetTextExtentPoint32(MemDC.GetSafeHdc(),strText,wcslen(strText),<b>se</b>);//获取字符串的宽度

se->cx 和se->cy 分别是字符串的长和宽

二、获取单个字符的尺寸用:GetTextMetrics。

TEXTMETRIC tm;

MemDC.GetTextMetrics(&tm);

TEXTMETRIC图示:

TEXTMETRIC结构体各成员介绍:

  TEXTMETRIC是在WINGDI.H中定义的型态的结构。

  TEXTMETRIC结构有20个栏位:

  typedef struct tagTEXTMETRIC {

  LONG tmHeight; //字符高度 参见TEXTMETRIC结构字段的图示

  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;

  变量:

  BYTE tmPitchAndFamily:

TMPF_FIXED_PITCH 为真表示变长型字体,为假是定长型字体
TMPF_VECTOR 为真表示矢量字体
TMPF_TRUETYPE 为真表示全真字体
TMPF_DEVICE 为真表示设备字体
  TEXTMETRIC类型的变量用于存储装置字体结构信息(上述变量),在窗口中输出文字时需要用到上述变量。

示例一

  要获得TEXTMETRIC类型变量的值在windows SDK中可以用GetTextMetrics(HDC,LPTEXTMETRIC)函数;在MFC中可以用GetTextMetrics(&tm)。

  运用例子如下:

  运用Windows SDK的情况:

  TEXTMETRIC tm;

  GetTextMetrics(hdc,&tm);

  运用MFC 的使用情况:

  TEXTMETRIC tm;

  CDC::GetTextMetrics(&tm);

示例二

  下面是取得系统字体的字符宽度和高度的WM_CREATE程序代码:

  case WM_CREATE:

  hdc = GetDC (hwnd) ;

  GetTextMetrics (hdc, &tm) ;

  cxChar = tm.tmAveCharWidth ;

  cyChar = tm.tmHeight + tm.tmExternalLeading ;

  ReleaseDC (hwnd, hdc) ;

  return 0 ;

  其中cxChar、cyChar、cxCaps都是在回调函数中定义的static int类型的变量。对于固定宽度的字体, cxCaps等于cxChar。对于可变宽度字体,cxCaps设定为cxChar乘以150%。对于可变宽度字体,TEXTMETRIC结构中的tmPitchAndFamily字段的低位为1,对于固定宽度字体,该值为0。 示例二中使用这个位从cxChar计算cxCaps: cxCaps = (tm.tmPitchAndFamily & 1 ? 3 : 2) * cxChar / 2 ;

时间: 2024-10-09 23:43:49

获取单个字符尺寸和字符串尺寸的相关文章

JS取出特定字符前后的字符串,针对一串自负里面的单个字符前后的字符串

//针对一串自负里面的单个字符前后的字符串<!doctype html> <html> <head> <meta charset="utf-8"> <title>分割字符串</title> </head> <script type="text/javascript"> /* string 字符串; str 指定字符; split(),用于把一个字符串分割成字符串数组; s

C#获取单个字符的拼音声母

public class ConvertToPinYing { /// <summary> /// 汉字转拼音缩写 /// </summary> /// <param name="str">要转换的汉字字符串</param> /// <returns>拼音缩写</returns> public static string GetPYString(string str) { string tempStr = &quo

C++【String类】String查找单个字符,查找字符串的函数实现

#include<iostream> #include<stdlib.h> #include<assert.h> using namespace std; class String { public:     String(const char* str)         :_str(new char[strlen(str) + 1])     {         _size = strlen(str);         _capacity = _size + 1;  

C++【String类】String删除单个字符,删除字符串的函数实现

#include<iostream> #include<stdlib.h> #include<assert.h> using namespace std; class String { public:     String(const char* str)         :_str(new char[strlen(str) + 1])     {         _size = strlen(str);         _capacity = _size + 1;  

C++【String类】String插入单个字符,插入字符串的函数实现

#include<iostream> #include<stdlib.h> #include<assert.h> using namespace std; class String { public:     String(const char* str)         :_str(new char[strlen(str) + 1])     {         _size = strlen(str);         _capacity = _size + 1;  

iOS 获取字符串中的单个字符

要取到单个字符,就要知道字符串的编码方式,这样才能够定位每个字符在内存中的位置.但是,iOS的字符串编码是不固定的,因此,需要设置一个统一的编码格式,将所有其他格式的字符串都转化为统一的格式,然后就可以根据编码规则取到单个字符了.在这里,使用UTF-8编码.UTF-8编码的使用范围比较广泛,客户端与服务器之间传输的数据大多以UTF-8编码. 关于UTF-8的详细说明可以Wiki下:UTF-8. 下图是UTF-8编码的格式: 开发的流程大概是: 将NSString字符串转成UTF-8格式的char

字符串中单个字符的用法

我们使用字符串时经常要对字符串中单个字符进行处理,比如检测一个string对象是否包含空白,或者把string对象中的字母大写改为小写,查看某个特定字符是否出现,判断字符串是否为数字等等. 这类处理的关键是要获取字符本身.有时需要处理string对象中的每一个字符,另外一些时候则只需处理某个特定的字符,还有些时候遇到某个条件处理就要停下来. 在cctype头文件中定义了一组标准库函数处理字符串的工作. cctype头文件中的函数 isalnum(c)    当c是字母或数字时为真 isalpha

Android应用资源的使用方法(数组、颜色、尺寸、字符串、布尔、整数)

一.Android中资源分类详解 1.Android资源分类 Android中的资源分为两大类 : 可直接访问的资源, 无法直接访问的原生资源; -- 直接访问资源 : 这些资源可以使用 R. 进行访问, 都保存在res目录下, 在编译的时候, 会自动生成R.java 资源索引文件; -- 原生资源 : 这些资源存放在assets下, 不能使用 R类 进行访问, 只能通过 AssetManager 以二进制流形式读取资源; 2.Android资源详解 res目录下资源详解 : -- res/an

DOS功能调用——单个字符及字符串的输入输出

DOS系统功能调用步骤:    1. AH <- 功能号    2.指定寄存器放入该功能所要求的入口参数    3.执行int 21H    4.分析出口参数 单字符输入输出 01h键盘输入            AL=输入字符    02h显示器输出            DL=输出字符    07h直接控制台输入(无回显)    AL=输入字符    08键盘输入(无回显)        AL=输入字符======================汇编例子===================