Obtenir la largeur du texte dans MFC
Je suis désireux de redimensionner dynamiquement un CButton à la largeur du texte. Est-il un moyen intégré pour ce faire, dans MFC, ou d'un moyen de calculer la largeur en pixels de certains de texte (afin que je puisse utiliser CWnd::SetWindowPos
)?
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser CDC::GetTextExtent pour calculer la largeur du texte dans une certaine police. Utilisation CWnd::GetDC pour obtenir le Contexte de Périphérique à partir du contrôle de l'affichage du texte.
C'est pénible. Vous avez besoin d'utiliser
CWnd::GetFont()
sur le bouton pour obtenir la police, elle est à l'aide, et ensuite utiliser la normeGetTextText
sur unCDC
objet où vous avez sélectionné la police.Il ressemble à quelque chose comme
En plus de @demoncodemonkey réponse, vous pouvez appeler CDC::DrawText avec le
DT_CALCRECT
drapeau. De cette façon, le texte ne sera pas dessiné, mais le CRect vous passer à 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 (à l'aide de la
DT_WORDBREAK
drapeau). Vous ne serez pas en mesure de le faire à l'aide deCDC::GetTextExtent
.GetTextExtent
etDrawText
?DrawText
a à prendre des mesures et mettre en page le texte avant de le dessiner, le tout enGetTextExtent
seulement les anciens, je ne serais pas surpris s'il y avait, oui. N'ai pas de données empiriques pour soutenir ceci, cependant.