我正在開發一個.net 3.5 Win Forms程序,我遇到了一個「有趣」的文本繪圖問題。.net DrawString/StringFormat問題
我正在實現一個文本編輯控件,它使用DrawString()和StringFormat.GenericTypographic(從此以後,GT)繪製文本。當用戶鍵入時,該行中較早的整個單詞(或一組單詞)隨機左右微妙地移動。
看起來很可能是四捨五入錯誤 - 受影響的塊看起來會在字符添加到行的末尾時在水平面中移動一個像素。如果我使用StringFormat.GenericDefault(GD),這不會發生,但字符渲染不準確,這是不可接受的。
我推斷我可以慢慢地將GD變成GT(每個設置在MSDN中討論,顯然可以在調試器中檢查),並查看哪些FormatFlags或其他設置導致了這種情況。但是,如果我拿一份GD的副本,改變所有的屬性,使它與GT完全相同,那麼角色的位置就會大不相同 - 這兩個被認爲是相同的對象的行爲顯然是不一樣的。
像太多事情恕我直言,.net反射器顯示StringFormat只是一個非託管對象的包裝,我只能假設並非所有的屬性都暴露給.net軟件。
任何人都可以提出任何可以幫助我的建議嗎?我知道TextRenderer可能爲渲染提供了一種替代方法,但是我在設計過程中早些時候對其進行了折扣(儘管我實際上不記得現在的問題是什麼......)。
編輯
我使用的渲染代碼如下:
sForm = new StringFormat(StringFormat.GenericTypographic);
sForm.FormatFlags |= StringFormatFlags.MeasureTrailingSpaces;
using (SolidBrush brush = new SolidBrush(frmt.ForegroundColour))
context.DrawString(line.Text, frmt.DisplayFont, brush, new PointF(horizontal, height), sForm);
你使用MeasureString()?通過該呼叫顯示一個片段。 – 2010-08-25 11:21:04
我不在這裏使用MeasureString() - 我編輯了答案來顯示我在做什麼。 – 2010-08-25 11:36:33