当前位置:C++技术网 > 精选软件 > 字体的高度组成结构图解以及编程中获取字体高度信息代码实现

字体的高度组成结构图解以及编程中获取字体高度信息代码实现

更新时间:2015-12-07 18:36:40浏览次数:1+次

    在学习Win32编程时,书中讲解的字体高度组成让我在第一遍学习时迷惑不已。本来这个并不难,只是书上图中标注错误和不完整,让我凌乱不已。现在再学的时候,可以很肯定的区分书中的错误。为了让大家更好的理解以及在编程中建立这种字体高度结构的印象以及使用字体、计算高度等以及获取字体信息等更加清晰,特地画了一张图让大家一目了然。然后用代码来获取这些信息,验证高度结构的信息和讲解是否一致。
    首先看看这个字体高度图:
    字体高度组成结构图
    我用字母A作为一个基本字符来划分了高度结构,用白线划分了高度的多个部分,用黑线上线连线标注了各个高度组成部分的含义。从图中我们就可以一目了然掌握字体的高度结构,根本不需要多讲。不过为了照顾有些初学者依然不太清楚,就多说几句。
    字体的总高度就是从最上面到最下面的高度。而字体中有一个基线,这个可能是一些人所不理解的地方。基线来源于英文字母的写法,字母q的下面尾巴和上面的圈刚好被基线分割,这个分割线就是基线。基线不只应用于英文字符,而是描述一个字体的高度组成结构。在文字的垂直对齐里,就有基线对齐。基线对齐所说的基线就是文字字体高度的基线。
    那么根据文字基线将高度划分为上下两个部分,我把他们分别叫做基线上高度和基线下高度,或许我的叫法不专业,但是很形象的描述了这个关系。实际上字体的总高度并不是基线上下的两个高度之和,总高度还要加上字体的外间距。虽然一般情况外间距都为0,但是万一什么时候他被设置为了非零呢,那岂不是高度计算错误。所以加上一个0也不会很费事,但是逻辑上更加合理。
    所以,总高度=基线上高度+基线下高度+外间距。
    然而,还有一个内间距,这也是一个书中没有说的很清楚的地方,很多人也是疑惑不解。内间距一般用来存放欧美一些带有重音符号的字母,比如我们的拼音的声调,就是放在这个位置。一般时候,我们不会要这个声调,所以内间距就为0。如果加上声调符号的话,就不为0了。那么此时,声调占用的内间距则和剩余的基线上高度一起组成基线上高度。这样也就表示,加入声调会导致字母显示空间变小了一点点。
    说到这里,文字字体高度的组成就完全讲完了。图中标注的英文串是这个高度结构在编程中的字体信息结构体中的相应的成员。下面我们来通过编程方式获取系统字体的信息。
    字体的信息用结构体TEXTMETRIC结构体存储,获取字体信息的函数为GetTextMetrics,代码如下:
TEXTMETRIC tm;
GetTextMetrics(hdc,&tm);
    然后你根据图中标出的TEXTMETRIC结构体的成员名称就可以找到的各部分的值了。