繁体   English   中英

Graphics.DrawString内联字体更改C#

[英]Graphics.DrawString inline font change C#

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

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

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

谢谢 :)

噢,ps如果在DrawString方法中有一种简单的方法可以确定矩形的正确高度,这样就不会剪切任何文本,那也将非常有帮助!

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

好的,我最终要做的是添加一个带有特殊“ 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)

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

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

它的效果很好,因为螺柱很少,并且渲染非常流畅。 如果有人有更好的解决方案,请告诉我!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM