GetTextExtentPoint32稍微返回值,字形被截断

时间:2012-05-22 01:35:29

标签: winapi fonts gdi typography

对于所有字符串,GDI函数GetTextExtentPoint32似乎返回的宽度总是小于ExtTextOut显示的宽度:

the y is truncated

在右侧红色箭头上方,“越野车”显示为ExtTextOut的块:没问题。

在左侧红色箭头上方,ExtTextOut显示“buggy”,然后“{,”显示width像素,其中width = GetTextExtentPoint32("buggy")width似乎有点小。

使用更大的字体和深色背景:

enter image description here

同样,“00”和“()”会显示在不同的ExtTextOut次来电中,其间有GetTextExtentPoint32("00")个像素。

任何帮助表示感谢。

1 个答案:

答案 0 :(得分:0)

在等宽True Type字体(Lucida Console)和OPAQUE背景模式下,我发现了同样的问题。问题似乎是您使用正确的x坐标调用ExtTextOut,但是该函数绘制了从x-1开始的背景,这是我没想到的。在较大的字体上,负移可能更高。字形最终正确定位,但是除非选择“透明”背景模式,否则“覆盖”是一个问题。以前,我以为我不需要指定rc参数,因为所有字符运行都是不重叠的,因此我根本不需要剪切,但是最终我不得不提供一个显然多余的RECT和ETO_CLIPPING标志,以防止这种水平的底涂过度。