6

我有一个字符串,我需要在绘图时计算矩形大小(文本高度)。我的实现使用DrawTextW()带有DT_WORDBREAK or DT_CALCRECT标志的函数。

我的字符串的一个例子:

thisisaverylonglonglonglineoftextthatneedstofitinsideagivenrectwidth

我可以在MSDN docs中看到,该DrawTextW()方法指出:

如果最大的单词比矩形宽,则宽度会扩大。如果文本小于矩形的宽度,则宽度会减小。如果只有一行文本,DrawText 会修改矩形的右侧,使其与该行中的最后一个字符绑定。

但是在 MSDN 文档中,则DrawTextExW()方法没有说明这一点。

所以我尝试使用该DrawTextExW()方法计算高度,但是结果与DrawTextW()函数相同,它扩展了矩形的宽度以适应最大的文本行。

DT_WORDBREAK那么,当在哪里和指定位置绘制大字符串(没有空格)时,如何正确计算具有给定(固定)宽度的文本矩形的高度DT_CALCRECT

编辑:

附带说明一下,有人知道 Microsoft Excel 如何绘制单元格文本吗?此文本绘图是否有 API 调用?这是我最初的问题的来源,但是它在 Excel 中实现的方式是在任何字符(不仅仅是空格)上绘制文本和分词/自动换行。

4

1 回答 1

8

您需要在参数中使用DT_WORD_ELLIPSIS标志(当然还有)。这将防止由于没有空格的长字符串而扩大。虽然它仍然不会破坏那些长字符串,但你的宽度问题将得到解决。uFormatDT_WORDBREAK

如果您还指定DT_MODIFYSTRING,那么您可以在最终平局之前自己弄清楚在哪里断开那根长绳。

DrawText(W)至于和的区别DrawTextEx(W):后者提供制表符格式、设置边距并返回实际绘制的字符数。(尺寸标注)功能没有区别。

于 2011-10-24T05:47:49.010 回答