gpt4 book ai didi

c++ - Windows/GDI- 测量字体字符的大小 (Marlett)

转载 作者:太空宇宙 更新时间:2023-11-04 13:23:14 28 4
gpt4 key购买 nike

我正在尝试测量字符的大小,但无法得出正确的结果。我们使用带有 DT_CALCRECT 标志的 DrawText 来测量字符串,这似乎工作得很好(公平地说,我们还没有实际测试它的像素完美测量)。

但是我现在正在尝试测量单个字符,Marlett 中的 'x' 符号来绘制一个关闭按钮,但它确实不想告诉我实际大小特点。它告诉我这个角色是 8x8 而实际上是 6x5,然后绘制的角色稍微偏离了我要求的位置。

高度方面,我猜它会返回该字体的字符高度(所有字符都相同,所有字体都相同)。但是对于宽度,它似乎在其中添加了字符间距,这似乎与其他字体无关(在 Arial 中尝试了几个字符)。在 Marlett 中,所有测试的字符似乎都返回相同的宽度。

是否有可能找出字符周围的额外间距是多少,以便我可以将“x”置于框中的中心?

最佳答案

大多数字体在字形的两侧都有一点间距,这样当您将它们排成一行时它们就不会接触。您可能不会想到像 Marlett 这样的特殊符号字体会出现这种情况,但它确实存在。

您可以使用 GetCharABCWidths获得这些空间的近似测量值(有时称为“提前宽度”)。 A 值通常是字形之前的间隙; B 值是字形本身的宽度,C 值是字形之后的空格。但是,这些可能不是精确的测量值,因为它们更多的是让事情看起来正确。像 O 这样的圆形字形可能会溢出到周围的空间中,而 AC 值实际上可以是负数。

制作精良的字体还包含字距调整,使某些字符对之间的间距看起来平衡,但我不希望像 Marlett 这样的特殊符号字体有这些。

根据您的具体需要,您可以测试 B 值是否是字形的精确值以及 A 值是否是适当的偏移量。

Marlett 是一个很酷的 hack,可以处理在各种分辨率下呈现漂亮的控件;它肯定比您仍然可以从 LoadImage 获得的旧 OEM 图像更好用.但现代 UI 通常依赖于代码(如 IIinspectable 建议的主题)和/或自定义位图(如 Hans Passant 建议的)。您最好的选择可能是为了您的既定目的而采用其中一种技术。但我觉得您实际提出的问题值得回答。

关于c++ - Windows/GDI- 测量字体字符的大小 (Marlett),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34220897/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com