2009-11-16 19 views
5

Bir CButton'u içindeki metnin genişliğine dinamik olarak yeniden boyutlandırmak istiyorum. MFC'de bunu yapmak için yerleşik bir yol var mı, yoksa belirli bir metnin piksel genişliğini hesaplamak için bir yol var mı (böylece CWnd::SetWindowPos'u kullanabilirim)?Metin genişliğini MFC olarak alın

cevap

6

Sıkıcı. Kullanmakta olduğu yazı tipini almak için düğmede CWnd::GetFont() kullanmanız ve ardından bu yazı tipini seçmiş olduğunuz nesnesindeki standart GetTextText kullanın. O @ demoncodemonkey cevabı ek olarak

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

gibi görünür, sen DT_CALCRECT bayrağıyla CDC::DrawText çağırabilir. Bu şekilde metin çizilmeyecek, ancak işleve ilettiğiniz CRect, çizilecek metnin genişliğine ve yüksekliğine sahip olacaktır.

Bu özellikle satır sonları ile metin çizmek istiyorsanız (DT_WORDBREAK bayrağını kullanarak) yararlıdır. CDC::GetTextExtent kullanarak bunu yapamazsınız.

+0

'GetTextExtent 've' DrawText' arasında bir performans farkı var mı? – 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 
      ); 
İlgili konular