Graphics.DrawString内联字体更改C#

Graphics.DrawString内联字体更改C#,c#,graphics,compact-framework,C#,Graphics,Compact Framework,我正在创建一个应用程序,它将在一个格式良好的段落中显示JSON数据。JSON数据有标题、子标题、正文等内容。正文中可能有链接(我只需要显示为蓝色和下划线),这就是我遇到麻烦的地方 该程序基于.net Compact Framework,我只得到一个图形对象和JSON对象(以及一个矩形、字体和颜色)。是否仍然可以很好地绘制一个文本字符串,并将所有链接更改为不同的颜色/字体 我的想法是画出每个单词,然后在单词出现时立即更改字体。这听起来效率很低。有更好的办法吗 谢谢:) 哦,还有一点,如果有一种简单

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

该程序基于.net Compact Framework,我只得到一个图形对象和JSON对象(以及一个矩形、字体和颜色)。是否仍然可以很好地绘制一个文本字符串,并将所有链接更改为不同的颜色/字体

我的想法是画出每个单词,然后在单词出现时立即更改字体。这听起来效率很低。有更好的办法吗

谢谢:)

哦,还有一点,如果有一种简单的方法可以在DrawString方法中确定矩形的适当高度,这样就不会剪切文本,那也会非常有用

更新:我想出了我的问题:)

好的,我最后做的是添加一个带有特殊“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
,然后绘制适合的单词,trunc word中的字符串,将curX设置为0,将
curY+=maxWordHeight
设置为该行上使用的字体的最大高度。如果
word
中的所有单词都用完了,则返回null,否则返回trunc'ed单词

DrawWord
非常相似,但运行时假设curX始终为=0,因此它可以绘制整个字符串,然后相应地设置curX和curY


它工作得很好,因为在这里几乎没有studer,渲染也很平滑。如果有人有更好的解决方案,请告诉我

这是compact框架上的WinForms应用程序吗?如果没有,你能告诉我们更多关于这个应用程序的信息吗?是的,它是一个基于compact框架的WinForms应用程序。它实际上是一个新的Facebook客户端:)我已经在XDA开发者上开发了几个月了。