专栏导航
下一篇:无
本节前言
对于本节所讲解的知识,有可能,你会需要时不时地参考本专栏的其它文章。真的遇到了需要参考之前的文章的知识点,请你自行查阅。
我呢,也会提到一部分的参考课节。但是呢,你不应该依赖于我的主动提及。最好呢,你自己能够多去了解和查看本专栏目录。
本节内容,来自于对佩措尔德教材的大段抄录。
我们开始。
一. 系统字体
设备环境同时还定义了在调用 TextOut 时 Windows 使用的字体。默认的字体称为 "系统字体" 或 SYSTEM_FONT(标识符定义在 WinGdi.h 中)。系统字体是 Windows 在标题栏、菜单和对话框中使用的默认字体。
在早期的 Windows 中,系统字体是一种等宽字体:所有字符的宽度是一样的,就像打字机那样。但是,从 Windows 3.0 开始,系统字体变成了变宽字体:每个字符的宽度是不一样的。例如,字符 "W" 比字符 "i" 要宽。很多相关阅读研究表明,用变宽字体印刷的文章比用等宽字体印刷的可读性更强。其原理是,当字符排列得更紧凑时,眼睛和大脑更容易注意到单词而不仅仅是一个个的字符。可想而知,从等宽字体变到变宽字体导致很多早期的 Windows 程序不再适用,程序员们需要学习使用字体的新技术。
系统字体是一种 "点阵字体" :每个字符由像素点组成。(以后,我们还会学习 TrueType 字体,由轮廓定义字符。)在某种程序上,系统字体中字符的大小取决于显示器的大小:系统字体的设计要求能够在显示器上起码显示 25 行 80 列字符。
二. 字符大小
为了用 TextOut 函数显示多行文本,就需要知道字体中字符的尺寸。由字符的高度可以决定下一行文字的垂直位置,而由字符的平均宽度可以决定下一栏文本的水平位置。
那么系统字体中字符的平均宽度是多少?我不会告诉你,或者说,我不知道。即使我说了,很可能,答案也是错误的。因为这取决于显示器的分辨率。Windows 要求的最低分辨率是 640 * 480 ,但很多用户喜欢 800 * 600 和 1024 * 768 。而且,在这些高一点的分辨率里面,用户还可以选择不同的系统字体的字号。
程序可以通过调用 GetSystemMetrics 函数来获取用户界面的尺寸。同样地,通过调用 GetTextMetrics 函数,程序可以获取字体尺寸。GetTextMetrics 函数需要一个设备环境句柄,因为它会返回该设备环境中当前选定的字体的信息。Windows 将把字符尺寸的各种值复制到类型为 TEXTMETRIC 的结构中。该结构体在 WinGdi.h 中定义,有 20 个字段,但是我们仅关心其中的前 7 个。
typedef struct tagTEXTMETRIC {
LONG tmHeight;
LONG tmAscent;
LONG tmDescent;
LONG tmInternalLeading;
LONG tmExternalLeading;
LONG tmAveCharWidth;
LONG tmMaxCharWidth;
【其他字段】
} TEXTMETRIC, *PTEXTMETRIC;
这些字段的值的单位取决于设备环境中当前选定的映射模式。默认的映射模式是 MM_TEXT,所以它们的值是以像素为单位的。
在调用 GetTextMetrics 函数前,首先要定义一个结构体变量,同常命名为 tm 。
TEXTMETRIC tm;
需要获取字号时,首先获取设备环境句柄,然后调用 GetTextMetrics 。
hdc = GetDC(hwnd);
GetTextMetrics(hdc, &tm);
ReleaseDC(hwnd, hdc);
在这之后就可以检查文字尺寸结构中的值,并保存以后需要使用的部分。
总 结
读一两遍,相信你能看懂的。
专栏导航
下一篇:无