在MFC中获取文本宽度

Sma*_*ery 5 c++ mfc visual-c++

我想动态地将CButton调整到其中文本的宽度.是否有内置的方法在MFC中执行此操作,或者计算某些指定文本的像素宽度(以便我可以使用CWnd::SetWindowPos)?

小智 8

这很乏味.您需要使用CWnd::GetFont()按钮来获取它所使用的字体,然后在您将选择该字体GetTextTextCDC对象上使用该标准.它看起来像

CClientDC dc( &button );
CFont * pOldFont = dc.SelectObject( button.GetFont() );
 ... dc.GetTextExtent...
dc.SelectObject( pOldFont);
Run Code Online (Sandbox Code Playgroud)


dem*_*key 6

您可以使用CDC :: GetTextExtent来计算某种字体的文本宽度.使用CWnd :: GetDC从显示文本的控件中获取设备上下文.


dje*_*dot 5

除了 @demoncodemonkey 的答案之外,您还可以使用该标志调用CDC::DrawTextDT_CALCRECT。这样,文本将不会被绘制,但传递给函数的 CRect 将具有要绘制的文本的宽度和高度。

如果您想绘制带有换行符的文本(使用标志DT_WORDBREAK),这尤其有用。您将无法使用 来做到这一点CDC::GetTextExtent