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

DrawText的DT_CALCRECT格式能否返回文本适配RECT所需宽度?

关于DrawText() DT_CALCRECT模式的宽高获取问题

DT_CALCRECT模式下,DrawText()的返回值确实仅为格式化文本的高度,但文本所需的宽度会通过你传入的RECT结构体返回——你之前忽略了这一点。

你的初始代码里rectCheck被初始化为{0,0,0,0},调用DrawText()后,rectCheck.right字段会被填充为文本适配所需的宽度值,实际宽度可通过rectCheck.right - rectCheck.left计算得到。

修改代码验证这一点:

LPCWSTR textCheck = L"12345";
RECT rectCheck = { 0, 0, 0, 0 };
int textHeight = DrawText(
    hdc,
    textCheck,
    -1,
    &rectCheck,
    DT_CALCRECT);

int textWidth = rectCheck.right - rectCheck.left;
// textWidth即为文本适配所需的宽度,textHeight是返回的文本高度

你两次调用返回高度都是16,是因为当前DC使用的字体行高固定为16,单行文本的高度不受文本长度影响。如果启用多行模式(比如添加DT_WORDBREAK标志),返回的高度会根据换行后的总行数变化。

总结:

  • DrawText()在DT_CALCRECT模式下的返回值仅代表文本高度(多行则是总高度)
  • 文本所需宽度需从传入的RECT结构体的right字段推导
  • 你之前仅关注了返回值,未读取RECT的修改后的值,才误以为没获取到宽度

内容的提问来源于stack exchange,提问作者user22157294

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 15:27:02