在MFC中获取文本宽度

时间:2009-11-16 23:59:38

标签: c++ visual-c++ mfc

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

4 个答案:

答案 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 
            );