2010-12-10 58 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。

它工作得很好,因为在很少有探测器,它呈现相当顺利。如果有人有更好的解决方案,请让我知道!