第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 :系统字体与字符大小

回到目录

下一篇:无

相关推荐
心仪久了会沦陷32 分钟前
C语言数据结构入门——树与二叉树详解:概念、堆实现与链式遍历
c语言·数据结构·算法
悠仁さん2 小时前
【C++】哈希表
c++·算法·散列表
xbzb2 小时前
自定义 yum 软件源:Linux 上 createrepo,Windows 上纯 Python 也能造
linux·运维·windows·python·yum·createrepo
武雄(小星Ai)3 小时前
Ollama报llama-server binary not found排坑实录:服务活着引擎没了
人工智能·windows·大模型·ollama·排坑
Severus_black4 小时前
【C++初阶】list使用及相关实现,思路顺滑流畅!
c语言·数据结构·c++·stl·list
敲上瘾5 小时前
Qt Widgets入门:项目模板解析与Hello World
开发语言·数据库·c++·qt·ui·qt6.3
旖旎夜光7 小时前
【C++ 基础入门】C++ 多态(中):虚函数表、多态原理与动静绑定
开发语言·c++·笔记·学习
希和20278 小时前
C语言程序设计题|有序数组插入数字冒泡排序
c语言·数据结构·算法
旖旎夜光8 小时前
【C++ 基础入门】C++多态(下):单/多继承虚表、多态补充与 21 道高频题
开发语言·c++·笔记·学习
叼烟扛炮17 小时前
[LangChain] 学习笔记(06):突破大模型限制——结构化输出(Structured Output)
windows·笔记·学习·langchain