我有一个ac#应用程序,它可以进行文本渲染,与简单的所见即所得文本编辑器相同.
我正在使用TextRenderer.DrawText将文本呈现到屏幕上,使用GetTextExtentPoint32来测量文本,这样我就可以在同一行上定位不同的字体样式/大小.
在Vista这一切都很好.然而,在XP中,Arial渲染方式不同,某些字符(如"o"和"b")占用的宽度比Vista中的宽.GetTextExtentPoint32似乎是在Vista中测量字符串,但宽度较小.最终结果是,每隔一段时间就会出现一段文本与之前的文本重叠,因为前面的文本被测量为小于它在屏幕上的实际值.
此外,我的文本渲染代码模仿即正确的文本渲染(仅用于简单格式和英文),即文本渲染似乎在vista和xp之间保持一致 - 这就是我注意到不同字符大小的变化.
有什么想法发生了什么?
简而言之,TextRenderer.DrawText和GetTextExtentPoint32在xp中与Arial不匹配.DrawText似乎绘制了比Vista中更大和/或更小的某些字符,但GetTextExtentPoint32似乎是在Vista中测量文本(它似乎与文本渲染相匹配,即在xp和vista上).希望有道理.
注意:遗憾的是TextRenderer.MeasureString不够快或不够准确,无法满足我的要求.我尝试使用它,不得不把它撕掉.