1

我试图最小化以编程方式构造的 Windows 窗体(使用 C#)上的控件之间的垂直距离。这涉及适当地设置 Height 属性。

我发现,如果控件的文本中不包含任何带有下划线的字母(即没有任何字符 j、g、p、q 或 y),那么控件的高度可能会小于包含这样的字母(如果它确实包含带有下降器的字母,那么如果高度不够,下降器将被切掉)。

只要语言是英语或英语,就可以很好地测试上述 5 个字符中的任何一个,但我需要能够满足(几乎)任何语言。

有没有办法,给定一些任意的 Unicode 字符(可能还有字体)来确定该 Unicode 字符是否有下划线?

4

2 回答 2

1

没有为 Unicode 字符定义任何属性来指示是否存在下降线,这实际上是字形设计而不是字符的一个特征。例如,“Q”在许多字体中都有一个下降体,而“J”在某些字体中有一个。此外,鉴于上下文,您还应该考虑放置在字母下方的变音符号,而不仅仅是基本字母的后代。可能还有字母上方的变音符号。

因此,您需要阅读有关字符尺寸的字体信息(如果可用),或者在您的软件中试探性地绘制字符并测量它们的尺寸。

根据经验,任何低于字体大小 1.1 倍的行高都会导致某些字符和字体出现问题。使用 1(“设置纯色”)是不够的,因为字符实际上可能超出字体大小。

于 2012-07-16T10:59:37.740 回答
0

在 Windows 中,您调用 GetPath() 来获取一个数组,其中包含构成字形字符串的周长或轮廓的每个点的 X/Y 坐标。在数组中搜索最小值/最大值,这将为您提供完全包围字符串的矩形。就在字母的边缘。

于 2017-11-13T21:47:22.573 回答