默认 STATIC 控件高度为 8(对话框单位)并且文本适合,但 DrawText() DT_CALCRECT 说它太小?

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

在对话框内,我检查了一个 STATIC 控件,该控件是在资源编辑器中使用默认高度 8 个对话框单位创建的。 文字看起来不错。

但是,如果我使用

DrawText()
使用
DT_CALCRECT
检查所需的文本高度,它会说 3 像素(假设像素)太小?它说现有的STATIC控件高度是13,但是文本矩形计算说它需要是16;如果它是 16,那么与它后面的控件相比,它看起来太高了。

为什么它说需要 16,而 13 似乎可以正常工作?

CString cstr=_T("Some Text...");
CRect textsize;
m_ctlStaticText.GetDC()->DrawText(cstr, &textsize, DT_CALCRECT);
CRect rect;
m_ctlStaticText.GetWindowRect(rect);
c++ winapi mfc gdi
1个回答
4
投票

您从

GetDC()
返回的DC包含默认字体,这几乎肯定不是控件实际使用的字体。

您需要向控件发送一条

WM_GETFONT
消息以获取其正在使用的字体,然后在测量文本之前将该字体选择到 DC 中。

记得保存旧的字体句柄并在释放 DC 之前恢复它。

© www.soinside.com 2019 - 2024. All rights reserved.