2009-11-16 4 views
5

Je souhaite redimensionner dynamiquement un CButton en fonction de la largeur du texte qu'il contient. Y a-t-il une manière intégrée de faire ceci dans MFC, ou une manière de calculer la largeur de pixel d'un certain texte spécifié (de sorte que je puisse employer CWnd::SetWindowPos)?Obtenir la largeur du texte dans MFC

Répondre

6

C'est fastidieux. Vous devez utiliser CWnd::GetFont() sur le bouton pour obtenir la police qu'il utilise, puis utiliser le GetTextText standard sur un objet CDC où vous aurez sélectionné cette police. Il ressemble à

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

En plus de la réponse de @ demoncodemonkey, vous pouvez appeler CDC::DrawText avec le drapeau DT_CALCRECT. De cette façon, le texte ne sera pas dessiné, mais le CRect que vous passerez à la fonction aura la largeur et la hauteur du texte à dessiner. Ceci est particulièrement utile si vous voulez dessiner du texte avec des sauts de ligne (en utilisant le drapeau DT_WORDBREAK). Vous ne serez pas en mesure de le faire en utilisant CDC::GetTextExtent.

+0

Existe-t-il une différence de performance entre 'GetTextExtent' et' 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 
      ); 
Questions connexes