2

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

y 被截断

在右红色箭头上方,“buggy”显示为一个带有ExtTextOut:没问题的块。

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

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

在此处输入图像描述

同样,“00”和“()”在不同的ExtTextOut调用中显示,GetTextExtentPoint32("00")它们之间有像素。

任何帮助表示赞赏。

4

1 回答 1

0

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

于 2020-11-29T12:35:24.427 回答