我有一個c#應用程序可以進行文本渲染,與簡單的wysiwyg文本編輯器相媲美。TextRenderer.DrawText在XP和Vista上呈現Arial不同
我使用TextRenderer.DrawText將文本呈現到屏幕上,並使用GetTextExtentPoint32來測量文本,以便我可以在同一行上定位不同的字體樣式/大小。
在Vista中,這一切正常。然而在XP中,Arial的渲染方式不同,像'o'和'b'這樣的某些字符佔用了比Vista更多的寬度。 GetTextExtentPoint32似乎是測量字符串,因爲它會在Vista中,但寬度較小。最終的結果是,每隔一段時間,一段文本會重疊前一段文本,因爲前一段文本的測量值小於實際在屏幕上的值。
另外,我的文本渲染代碼模仿ie的文本渲染(僅適用於簡單的格式和英文語言),即文本渲染似乎在Vista和XP之間保持一致 - 這就是我注意到不同字符大小的變化。
任何人對發生了什麼有什麼想法?
簡而言之,TextRenderer.DrawText和GetTextExtentPoint32在xp for Arial中不匹配。 DrawText似乎會畫出比Vista更大和/或更小的特定字符,但GetTextExtentPoint32似乎像在Vista中那樣測量文本(這似乎與xp和vista中的文本渲染匹配)。希望這是有道理的。
注意:不幸的是TextRenderer.MeasureString不夠快也不夠準確,無法滿足我的要求。我嘗試過使用它,不得不撕掉它。
+1因爲我知道你在處理什麼!我只需要處理固定寬度的字體。 – leppie 2010-04-08 06:28:51
您確定它不是DPI或Cleartype類問題? – 2010-04-08 08:30:36