=============================================================
标题:GetTextMetrics和GetDeviceCaps函数
摘要:
备注:
日期:2010.5.30
姓名:朱铭雷
=============================================================
(1)GetTextMetrics函数能够获取字体的一些重要信息,当我们要输出文本时,这些参数就派上用场了。它将获取的全部信息都存储到TEXTMETRIC结构体中。
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;
这其中最常用到的几个成员是:tmHeight,tmInternalLeading,tmExternalLeading。下面是一个示意图:
当输出多行文本时,经常通过“tm.tmHeight + tm.tmExternalLeading”来计算出下一行文本的Y坐标。
另外可以通过GetTextExtent函数来获取某一行文本的宽度和高度,如:
CSize sizeText;
CString strText;
strText.Format(_T("compute the width and height of a line of text");
sizeText = pDC->GetTextExtent(strText);
TRACE(_T("string width = %d, string height = %d/n"), sizeText.cx, sizeText.cy);
(2)GetDeviceCaps函数能够返回如下几个重要的显示参数,当然不仅仅是这些。
索引 |
描述 |
HORZSIZE |
物理宽度(毫米) |
VERTSIZE |
物理高度(毫米) |
HORZRES |
象素宽度 |
VERTRES |
象素高度 |
LOGPIXELSX |
每逻辑英寸的水平点数 |
LOGPIXELSY |
每逻辑英寸的垂直点数 |
如:
TRACE(_T("LOGPIXELSX = %d, LOGPIXELSY = %d/n"),
pDC->GetDeviceCaps(LOGPIXELSX),
pDC->GetDeviceCaps(LOGPIXELSY));
TRACE(_T("HORZSIZE = %d, VERTSIZE = %d/n"),
pDC->GetDeviceCaps(HORZSIZE),
pDC->GetDeviceCaps(VERTSIZE));
TRACE(_T("HORZERS = %d, VERTRES = %d/n"),
pDC->GetDeviceCaps(HORZRES),
pDC->GetDeviceCaps(VERTRES));
在我电脑的输出结果:
LOGPIXELSX = 96, LOGPIXELSY = 96
HORZSIZE = 300, VERTSIZE = 187
HORZERS = 1280, VERTRES = 800
我电脑的显示器分辨率是1280*800