我想要将CButton动态调整为其中文本的宽度。是否有在MFC中执行此操作的内置方法,或者计算某些指定文本的像素宽度的方法(以便我可以使用CWnd::SetWindowPos
)?
答案 0 :(得分:8)
这很乏味。您需要使用按钮上的CWnd::GetFont()
来获取其使用的字体,然后在GetTextText
对象上使用标准CDC
,您将选择该字体。
它看起来像
CClientDC dc( &button );
CFont * pOldFont = dc.SelectObject( button.GetFont() );
... dc.GetTextExtent...
dc.SelectObject( pOldFont);
答案 1 :(得分:6)
您可以使用CDC::GetTextExtent计算某种字体的文字宽度。使用CWnd::GetDC从显示文本的控件中获取设备上下文。
答案 2 :(得分:4)
除了@ demoncodemonkey的答案,您还可以使用DT_CALCRECT
标记来呼叫CDC::DrawText。这样就不会绘制文本,但传递给函数的CRect将具有要绘制的文本的宽度和高度。
如果要使用换行符(使用DT_WORDBREAK
标志)绘制文本,这将非常有用。您将无法使用CDC::GetTextExtent
。
答案 3 :(得分:1)
CClientDC hdc(this);
GetRect.SetRect(0,0,iLabelWidth,0);
//
//To get Height of Lable in advance
//
hdc.DrawText(
TempData,
TempData.GetLength(),
GetRect,
DT_CALCRECT | DT_MODIFYSTRING | DT_WORDBREAK
);