DrawText()的DT_CALCRECT格式可以返回宽度吗?

问题描述 投票:0回答:2

嗨,我想知道文本适合

RECT
所需的宽度值。

所以现在我正在尝试根据

RECT
获取
LPCWSTR
尺寸,使用
DT_CALCRECT
DrawText()
格式。

微软声明

DT_CALCRECT

确定矩形的宽度和高度。 [...] DrawText 返回格式化文本的高度[...]

以下代码

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

返回相同的值 (16),

textCheck
为“12345”和“123456789”。

它只能返回高度还是我遗漏了一些东西?

DT_CALCRECT
是否可以确定自己的宽度但无法返回它?

我期望

DT_CALCRECT
能够返回宽度和高度。

c++ winapi rect drawtext
2个回答
2
投票

除非我误解了什么,如果您只想要渲染字符串(在单行上)所需的宽度,请将 DT_CALCRECT 与 DT_SINGLELINE 组合,然后检查

rectCheck
,它是一个输出参数。

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

int requiredWidth = rectCheck.right-rechCheck.left;


0
投票

使用 GetTextExtentPoint32 返回格式化文本的元组(宽度,矩形)

例如Python中的这段代码:

wText, hText = win32gui.GetTextExtentPoint32(handleDC,strText)
© www.soinside.com 2019 - 2024. All rights reserved.