Graphics.DrawString内联字体更改C#

时间:2010-12-10 21:00:42

标签: c# graphics compact-framework

我正在创建一个应用程序,它将在格式正确的段落中显示JSON数据。 JSON数据有标题,子标题,正文等。在正文中可以有链接(我只需要显示为蓝色和下划线)这就是我遇到麻烦的地方。

该程序基于.net Compact Framework,我只给出了一个Graphics对象以及JSON对象(以及一个矩形,字体,颜色)。反正是否可以很好地绘制一串文本,并将所有链接更改为不同的颜色/字体?

我的想法是绘制每个单词,然后在单词出现时更改字体。这听起来非常低效。还有更好的方法吗?

谢谢:)

哦,p.s.如果有一种简单的方法可以在DrawString方法中确定矩形的正确高度,那么不会剪切任何文本,这也会非常有用!

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

1 个答案:

答案 0 :(得分:0)

好的,我最终做的是添加一个带有特殊“Word”对象的自定义绘图方法。 Word对象包含字符串,颜色和指向字体的指针。我将文本解析为Word对象的字典,然后循环遍历所有对象,并使用以下sudo代码绘制文本

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中的单词(由空格和“ - ”取消)直到curX > maxWidth,然后绘制适合的单词,在单词中截断字符串,将curX设置为0,将curY += maxWordHeight设置为该行上使用的字体的最大高度。如果word中的所有单词都用完了,则返回null,否则返回截断的单词。

DrawWord非常相似,但假设curX总是= 0,所以它可以绘制整个字符串然后相应地设置curX和curY。

它运作得很好,因为很少有研究者,它渲染得相当顺利。如果有人有更好的解决方案,请告诉我!