2010-12-10 16 views
0

我正在創建一個應用程序,該應用程序將在格式良好的段落中顯示JSON數據。 JSON數據具有標題,副標題,正文等內容。在正文中可以有鏈接(我只需要顯示爲藍色和下劃線),這就是我遇到麻煩的地方。Graphics.DrawString內聯字體更改C#

該程序基於.net精簡版框架,我只給出一個Graphics對象以及JSON對象(以及一個矩形,字體,顏色)。無論如何,很好地繪製一串文字,並將所有鏈接更改爲不同的顏色/字體?

我的想法是繪製每個單詞,只是改變字體的權利,然後當這個詞出現。這聽起來效率很低。有沒有更好的辦法?

謝謝:)

哦,p.s.如果有一種簡單的方法可以確定DrawString方法中矩形的正確高度,這樣就不會剪裁文本,這也會非常有幫助!

更新:我想出了我的P.S.問題:) http://www.mobilepractices.com/2007/12/multi-line-graphicsmeasurestring.html

+0

這是一個緊湊框架上的WinForms應用程序嗎?如果沒有,你能告訴我們更多關於應用程序嗎? – Bryan 2010-12-10 21:06:01

+0

是的,它是一個緊湊框架上的WinForms應用程序。它實際上是一個新的Facebook客戶端:)我已經在XDA-Developers上開發了幾個月了。 http://forum.xda-developers.com/showthread.php?t=630992 – 2010-12-10 21:08:47

回答

0

好吧,我最終做的是添加一個自定義繪圖方法w /特殊的「Word」對象。 Word對象包含字符串,顏色和指向字體的指針。我分析的文本到Word對象的字典,然後通過所有對象循環,並與下面的須藤代碼

int maxWidth = Width 
int curX = 0 
int curY = 0 

foreach word in words 
    if curX > 0 
     word = DrawWordUntilWidth(out curX, out curY, word, maxWidth) 

    if word != null 
     DrawWord(out curX, out curY, word, maxWidth) 

DrawWordUntilWidthword(空格deliminated和「 - 」)將MESURE話提請文本直到curX > maxWidth然後畫出適合的單詞,將單詞中的字符串截斷,將curX設置爲0,設置curY += maxWordHeight爲該行使用的字體的最大高度。如果word中的所有單詞都用完,則返回null,否則返回截斷的單詞。

DrawWord非常相似,但是假設curX始終爲0,所以它可以繪製整個字符串,然後相應地設置curX和curY。

它工作得很好,因爲在很少有探測器,它呈現相當順利。如果有人有更好的解決方案,請讓我知道!