专栏导航
下一篇:无
本节前言
对于本节所讲解的知识,有可能,你会需要时不时地参考本专栏的其它文章。真的遇到了需要参考之前的文章的知识点,请你自行查阅。
我呢,也会提到一部分的参考课节。但是呢,你不应该依赖于我的主动提及。最好呢,你自己能够多去了解和查看本专栏目录。
本节内容,来自对佩措尔德教材内容的大段抄录。
我们开始。
一. 本节正文
在 TEXTMETRICS 结构中有设备环境中当前字体的各种信息。但字体的纵向尺寸仅由其中的 5 项决定。下面的图片,演示了其中的 4 项。
图1
图1 展示的是 640 * 480 分辨率条件下的默认系统字体的情况。图1 中,演示的是带有重音符号的 A 和 q 两个字符的像素显示情形。
在图1 里面,从下往上数,第 3 行像素方格的上边所在的直线,为基线。
了解了基线的情况之后,我们再来说字体尺寸中最重要的一个概念, tmHeight,它是 tmAscent 和 tmDescent 的和。这两个值分别是字符在基线之上和基线之下的最大高度。
间距(leading),是两行文字之间的空间。在 TEXTMETRICS 结构里,内部间距(tmInternalLeading)包含在 tmAscent 中(也就是,包括在 tmHeight 中),该间距通常被用于显示重音符号。tmInternalLeading 的值可以被设置为 0,在这种情况下,带重音符号的字符会稍微短一点,以便把重音符号包含在内。
TEXTMETRICS 结构的另一个字段是 tmExternalLeading,它并不包含在 tmHeight 的值里。该字段是字体设计者建议在两行文字间留出的空间大小。在显示多行文字时,可以选择接受或者不理会这个建议。在我最近使用的系统字体中,这个值是 0 。这就是为什么,在图1 中没有标出这个字段的原因。
TEXTMETRICS 结构中有两个字段描述了字符的宽度:tmAveCharWidth 是小写字符的加权平均宽度,tmMaxCharWidth 是字体中最宽的字符的宽度。在等宽字体中,这两个值是一样的。在图1 所示的字体中,这两个值分别是 7 和 14 。
在本章的范例程序中,还有另一种字符宽度:大写字符的平均宽度。该值大小通常可以按 tmAveCharWidth 的 1.5 倍进行计算。
值得重视的是,系统字体的尺寸取决于 Windows 运行时的显示分辨率,有时还取决于用户选定的系统字号。Windows 提供了与设备无关的图形界面,但程序员也需要注意:不要在 Windows 应用程序里猜测文本的尺寸,不要使用固定的值,应该通过调用 GetTextMetrics 函数来获取这些信息。
示例图说明
本节所说的图片,其中的红色方格与点阵字体图画部分,是我用 MFC 编写出来的。在我用 MFC 画出了红色方格与点阵字体图画之后,又通过截图,将其保存下来,然后在 PhotoShop 里面导入这个截图,然后我去手动绘制了各个字段的标注线与标注文字,就形成了图1 的完整图片。尽管和佩措尔德教材的图片区别不大,但是,它的确是我自己画出来的。
这个图片,我想,我们用不着学习到 MFC 章节的时候,应该就可以将其绘制出来了。这个图,以我目前的能力,用 Windows API 程序,是可以将其画出来的。
到时候,学会了相关的基础知识以后,我会领着大家,来尝试着将这个图给画出来的。
总 结
本节,我认为,它还是很有意思的。多看看,你应该能理解的。
专栏导航
下一篇:无