如何强制 GetTextExtentPoint32 考虑字距调整?

问题描述

我有一个应用程序,它使用 GDI+ 并调用 DrawTextExW 将文本绘制到屏幕上。我还试图在编辑点放置一颗闪烁的克拉。我正在使用 GetTextExtentPoint32W 计算克拉的位置。这适用于等宽字体,但使用 Helvetica 之类的东西,如果我遇到具有字距调整的字符对(即“Yo”“To”等),我从 GetTextExtentPoint32W 返回的值将关闭,并继续走得更远,我包括的这些字符越多。正如您在下面的屏幕截图中看到的,克拉和突出显示的文本的位置就像没有字距调整一样:

Carat and highlight position off due to kerning

我检查了 documentation 并看到了这个:

由于某些设备对字符进行紧缩,因此字符串中字符的范围之和可能不等于字符串的范围。

不幸的是,这并不能真正解决问题。是说如果我要对每个单独字符的范围求和,我会得到与 GetTextExtentPoint32W 返回的值不同的数字,还是说 GetTextExtentPoint32W 正在对字符求和,所以你不应该期望它与屏幕上绘制的内容准确吗?在这种情况下,什么是“设备”?

此时我很乐意在 DrawTextExW 中禁用字距调整,或者想办法让 GetTextExtentPoint32W 在可能的情况下考虑字距调整。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)