我正在创建一个应用程序,它将在格式正确的段落中显示JSON数据。 JSON数据有标题,子标题,正文等。在正文中可以有链接(我只需要显示为蓝色和下划线)这就是我遇到麻烦的地方。
该程序基于.net Compact Framework,我只给出了一个Graphics对象以及JSON对象(以及一个矩形,字体,颜色)。反正是否可以很好地绘制一串文本,并将所有链接更改为不同的颜色/字体?
我的想法是绘制每个单词,然后在单词出现时更改字体。这听起来非常低效。还有更好的方法吗?
谢谢:)
哦,p.s.如果有一种简单的方法可以在DrawString方法中确定矩形的正确高度,那么不会剪切任何文本,这也会非常有用!
更新:我想出了我的P.S.题 :) http://www.mobilepractices.com/2007/12/multi-line-graphicsmeasurestring.html
答案 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)
DrawWordUntilWidth
将word
中的单词(由空格和“ - ”取消)直到curX > maxWidth
,然后绘制适合的单词,在单词中截断字符串,将curX设置为0,将curY += maxWordHeight
设置为该行上使用的字体的最大高度。如果word
中的所有单词都用完了,则返回null,否则返回截断的单词。
DrawWord
非常相似,但假设curX总是= 0,所以它可以绘制整个字符串然后相应地设置curX和curY。
它运作得很好,因为很少有研究者,它渲染得相当顺利。如果有人有更好的解决方案,请告诉我!