第4章,[标签 Win32] :文本尺寸的度量

专栏导航

上一篇:第4章,标签 Win32 :系统字体与字符大小

回到目录

下一篇:无

本节前言

对于本节所讲解的知识,有可能,你会需要时不时地参考本专栏的其它文章。真的遇到了需要参考之前的文章的知识点,请你自行查阅。

我呢,也会提到一部分的参考课节。但是呢,你不应该依赖于我的主动提及。最好呢,你自己能够多去了解和查看本专栏目录。

本节内容,来自对佩措尔德教材内容的大段抄录。

我们开始。

一. 本节正文

在 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 程序,是可以将其画出来的。

到时候,学会了相关的基础知识以后,我会领着大家,来尝试着将这个图给画出来的。

总 结

本节,我认为,它还是很有意思的。多看看,你应该能理解的。

专栏导航

上一篇:第4章,标签 Win32 :系统字体与字符大小

回到目录

下一篇:无

相关推荐
wuyk5551 天前
98.C语言易混难点:字符数组与字符串指针的底层差异
c语言·开发语言·c++·stm32·嵌入式硬件·算法
峥无1 天前
从0到1手撕红黑树:封装实现 my_map 与 my_set(SGI-STL 源码级深度解析)
开发语言·c++·笔记·算法·stl
波特率1152001 天前
C++新特性---属性说明符与标准属性
开发语言·c++
wp123_11 天前
IPX8 防水 Type‑C连接器:安费诺 124018792112A 与 TONEVEE TY48087‑24A 技术梳理
c语言·开发语言
不会代码的小猴1 天前
3. 控件学习1
开发语言·c++·笔记·qt·算法
Mr.亮先生1 天前
# 把 DeepSeek 官方 Agent 工作台,直接装进 Windows 启动器里
windows·deepseek·harness
烧酒同学1 天前
【C++】记录size of std::vector的巧妙坑
开发语言·c++·图形渲染
曹牧1 天前
C#:List<string>特定格式输出
windows·c#
2401_862880821 天前
数据结构 --- 栈
c语言·数据结构·算法
@呱呱爱学习1 天前
C++大成之路_ STL容器_ Vector
开发语言·c++