我有一个C#应用程序,可以进行文本渲染,类似于简单的所见即所得文本编辑器。我使用TextRenderer.DrawText将文本呈现到屏幕上,并使用GetTextExtentPoint32测量文本,以便在同一行上定位不同字体样式/大小。在Vista中,这一切都很正常。但是在XP中,Arial的呈现方式不同,某些字符(如“o”和“b”)占用的宽度比Vista中要大。然而,GetTextExtentPoint32似乎仍然按照Vista中的方式测量字符串,具有较小的宽度。最终结果是,每隔一段时间,一系列文本将重叠在其前面的文本上,因为先前的文本被测量为比实际在屏幕上显示的要小。此外,我的文本呈现代码完全模仿ie的文本呈现(仅适用于简单格式和英语语言),并且ie的文本呈现在Vista和XP之间似乎是一致的,这就是我注意到不同字符大小变化的原因。有人对发生了什么有任何想法吗?总之,对于Arial字体,TextRenderer.DrawText和GetTextExtentPoint32在XP上不匹配。DrawText似乎以比Vista更大和/或更小的方式绘制某些字符,但是GetTextExtentPoint32似乎按照Vista中的方式测量文本(这似乎与xp和vista上ie的文本呈现相匹配)。希望这有意义。注意:不幸的是,TextRenderer.MeasureString速度不够快或准确,无法满足我的要求。我尝试使用它,但不得不摆脱它。