小步慢跑

 

DrawText 输出自动换行

调试一个bug时发现一直以来对DrawText的 DT_WORDBREAK  参数理解有误。

MSDN的原文如下:

DT_WORDBREAK Breaks words. Lines are automatically broken between words if a word extends past the edge of the rectangle specified by the lprc parameter. A carriage return-line feed sequence also breaks the line.
 

这里说明如果有一个word超过了rectangle的边界,会在这个词和下一个词中间断为两行。

GDI认为 连续的英文字符为一个word,每一个数字或每一个汉字为一个word。假设要在宽为100的rect中使用 DT_WORDBREAK 绘制“dddddddddddddddddddddddddddddddddddddddd”会发现字符没有换行,同时最后有的字符没有完全显示。这个是符合msdn的描述的。同样的,如果绘制的是"dddddddddddddddddddddddddddddddddddddddddddddddddd aa"会发现实际绘制的是两行,第一行是没有完全显示的“ddd”第二行就是“aa”,这是因为根据断字的规则,第一个word“ddddddd”超过了rect的边界,会在这个word和下一个word("aa")间换行。

 

如果想要不根据word换行,需要同时指定另一个标志DT_EDITCONTROL。

posted on 2012-10-11 13:43 zaccheo 阅读(2677) 评论(0)  编辑 收藏 引用 所属分类: gdi/gdi+


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


导航

统计

常用链接

留言簿

随笔分类(23)

随笔档案(26)

文章分类(1)

文章档案(1)

csdn

搜索

最新评论

阅读排行榜

评论排行榜