【发布时间】:2011-02-05 13:54:20
【问题描述】:
我有一个 c# 应用程序,它可以进行文本渲染,与简单的所见即所得文本编辑器相当。
我正在使用 TextRenderer.DrawText 将文本呈现到屏幕上,并使用 GetTextExtentPoint32 来测量文本,以便我可以在同一行上放置不同的字体样式/大小。
在 Vista 中,这一切正常。然而,在 XP 中,Arial 的呈现方式有所不同,某些字符(如 'o' 和 'b')比 Vista 中占用更多的宽度。 GetTextExtentPoint32 似乎像在 Vista 中一样测量字符串,但宽度更小。最终结果是,由于前面的文本被测量为小于屏幕上的实际大小,因此一段文本会时不时地与前面的文本重叠。
另外,我的文本渲染代码完全模仿了 ie 的文本渲染(仅适用于简单格式和英语),并且 vista 和 xp 之间的 ie 文本渲染似乎是一致的——这就是我注意到不同字符大小变化的原因。
有人对正在发生的事情有任何想法吗?
简而言之,TextRenderer.DrawText 和 GetTextExtentPoint32 在 xp 中与 Arial 不匹配。 DrawText 似乎绘制的某些字符比它在 Vista 中更大和/或更小,但 GetTextExtentPoint32 似乎像在 Vista 中一样测量文本(这似乎与 xp 和 vista 上的 ie 中的文本呈现相匹配)。希望这是有道理的。
注意:不幸的是,TextRenderer.MeasureString 不够快或不够准确,无法满足我的要求。我试过用它,不得不把它撕掉。
【问题讨论】:
-
+1 因为我知道你在处理什么!我只需要处理固定宽度的字体。
-
您确定这不是 DPI 或 Cleartype 类型的问题吗?
标签: c# text windows-vista windows-xp textrenderer