开发者

Get text width in MFC

开发者 https://www.devze.com 2022-12-12 04:11 出处:网络
I\'m wanting to dynamically resize a CButton to the width of the text within it. Is there either a built-in way to do this in MFC, or开发者_Go百科 a way of calculating the pixel width of some specifie

I'm wanting to dynamically resize a CButton to the width of the text within it. Is there either a built-in way to do this in MFC, or开发者_Go百科 a way of calculating the pixel width of some specified text (so that I can use CWnd::SetWindowPos)?


It's tedious. You need to use CWnd::GetFont() on the button to get the font it's using, and then use the standard GetTextText on a CDC object where you will have selected that font. It looks something like

CClientDC dc( &button );
CFont * pOldFont = dc.SelectObject( button.GetFont() );
 ... dc.GetTextExtent...
dc.SelectObject( pOldFont);


You can use CDC::GetTextExtent to calculate the width of text in a certain font. Use CWnd::GetDC to get the Device Context from the control displaying the text.


In addition to @demoncodemonkey's answer, you can call CDC::DrawText with the DT_CALCRECT flag. This way the text won't be drawn, but the CRect you pass to the function will have the width and height of the text to draw.

This is especially useful if you want to draw text with line breaks (using the DT_WORDBREAK flag). You won't be able to do that using CDC::GetTextExtent.


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 
            );
0

精彩评论

暂无评论...
验证码 换一张
取 消