2009-11-16 40 views
5

我想動態地調整一個CButton的大小,使其在文本中的寬度。有沒有一種內置的方式來做到這一點在MFC中,或者計算某些指定文本的像素寬度的方式(以便我可以使用CWnd::SetWindowPos)?在MFC中獲取文本寬度

回答

6

這很乏味。您需要在按鈕上使用CWnd::GetFont()以獲取正在使用的字體,然後在CDC對象上使用標準GetTextText,您將在該對象上選擇該字體。 它看起來像

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

除了@ demoncodemonkey的回答,您可以撥打CDC::DrawTextDT_CALCRECT標誌。這樣,文本將不會被繪製,但您傳遞給該函數的CRect將具有要繪製的文本的寬度和高度。

如果要使用換行符繪製文本(使用DT_WORDBREAK標誌),這特別有用。你將無法使用CDC::GetTextExtent來做到這一點。

+0

'GetTextExtent'和'DrawText'之間是否存在性能差異? – Richard 2014-03-11 17:08:37

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