You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用DrawText的DT_CALCRECT结合DT_WORDBREAK时无法获取文本尺寸的问题求助

DrawText的DT_CALCRECT结合DT_WORDBREAK时无法获取文本尺寸的问题求助

嗨,我之前也碰到过一模一样的问题,其实根源在于DT_WORDBREAK这个标志的工作逻辑:

当你同时使用DT_CALCRECT和DT_WORDBREAK时,DrawText需要知道文本允许的最大宽度才能计算换行后的总高度。而你初始把rc2设成{0,0,0,0},相当于告诉系统没有可用的宽度空间,它自然无法计算出有效的文本尺寸,所以返回的还是初始的空矩形。

解决方法很简单,只需要调整初始矩形的设置:

  • 给rc2设置一个有效的右边界值(也就是文本允许的最大宽度),比如你要在某个控件里显示,就用控件的客户区宽度;如果是自定义绘制区域,就设一个符合需求的固定值,左、上、下边界可以保持0。
  • 再调用DrawText时,就能得到正确的换行后文本尺寸了。

给你一个具体的代码示例:

CRect rc2{ 0, 0, 500, 0 }; // 这里设置最大宽度为500,根据你的实际场景调整
dc.DrawText(txt, &rc2, DT_CALCRECT|DT_WORDBREAK);
// 此时rc2的bottom就是文本换行后的总高度,right会保持你设置的最大宽度(或根据文本实际宽度调整)

额外提醒几个注意点:

  • 如果你的文本容器宽度是动态变化的(比如窗口resize时),记得每次计算前都要更新rc2.right为当前的可用宽度。
  • 如果你需要配合其他对齐标志(比如DT_LEFT、DT_CENTER),可以直接和这两个标志组合使用,不会影响尺寸计算的结果。

备注:内容来源于stack exchange,提问作者Сергей Соколов

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.23 11:05:29