我有执行文本渲染的 ac# 应用程序,与简单的所见即所得文本编辑器相当。
我正在使用 TextRenderer.DrawText 将文本呈现到屏幕上,并使用 GetTextExtentPoint32 来测量文本,以便我可以在同一行上放置不同的字体样式/大小。
在 Vista 中,这一切都很好。然而,在 XP 中,Arial 的呈现方式有所不同,某些字符(如 'o' 和 'b')比 Vista 中占用更多的宽度。GetTextExtentPoint32 似乎像在 Vista 中一样测量字符串,但宽度更小。最终结果是,由于前面的文本被测量为小于屏幕上的实际大小,因此不时会出现一行文本与其前面的文本重叠。
此外,我的文本渲染代码完全模仿了 ie 的文本渲染(仅用于简单格式和英语语言),并且 ie 文本渲染似乎在 vista 和 xp 之间是一致的——这就是我注意到不同字符大小变化的方式。
有人对发生的事情有任何想法吗?
简而言之,TextRenderer.DrawText 和 GetTextExtentPoint32 在 xp 中与 Arial 不匹配。DrawText 似乎比在 Vista 中绘制的某些字符更大和/或更小,但 GetTextExtentPoint32 似乎正在像在 Vista 中一样测量文本(这似乎与 xp 和 vista 上的 ie 中的文本呈现相匹配)。希望这是有道理的。
注意:不幸的是 TextRenderer.MeasureString 不够快或不够准确,无法满足我的要求。我试过用它,不得不把它撕掉。