2009-11-16 8 views
5

Quiero cambiar el tamaño de un CButton dinámicamente al ancho del texto dentro de él. ¿Hay alguna forma incorporada de hacer esto en MFC, o una forma de calcular el ancho de píxel de algún texto especificado (para que pueda usar CWnd::SetWindowPos)?Obtener ancho de texto en MFC

Respuesta

6

Es tedioso. Debe usar CWnd::GetFont() en el botón para obtener la fuente que está usando, y luego usar el estándar GetTextText en un objeto CDC donde habrá seleccionado esa fuente. Parece algo así como

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

Además de la respuesta de @ demoncodemonkey, puede llamar CDC::DrawText con la bandera DT_CALCRECT. De esta forma, el texto no se dibujará, pero el CRect que pase a la función tendrá el ancho y alto del texto para dibujar.

Esto es especialmente útil si desea dibujar texto con saltos de línea (usando el indicador DT_WORDBREAK). No podrá hacer eso usando CDC::GetTextExtent.

+0

¿Hay una diferencia de rendimiento entre 'GetTextExtent' y' DrawText'? – Richard

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