2009-11-16 16 views
5

Chcę dynamicznie zmieniać rozmiar CButton na szerokość tekstu w nim zawartego. Czy jest to albo wbudowany sposób, aby to zrobić w MFC, albo sposób obliczania szerokości piksela jakiegoś określonego tekstu (tak, żebym mógł użyć CWnd::SetWindowPos)?Pobierz szerokość tekstu w MFC

Odpowiedz

6

To żmudne. Należy użyć przycisku CWnd::GetFont() na przycisku, aby uzyskać czcionkę, której używa, a następnie użyć standardu GetTextText na obiekcie CDC, w którym zostanie wybrana ta czcionka. Wygląda to mniej więcej tak

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

oprócz użytkownika @ demoncodemonkey odpowiedź, można zadzwonić CDC::DrawText z flagą DT_CALCRECT. W ten sposób tekst nie zostanie narysowany, ale CRect przekazany do funkcji będzie miał szerokość i wysokość tekstu do narysowania.

Jest to szczególnie przydatne, jeśli chcesz narysować tekst z podziałem wiersza (przy użyciu flagi DT_WORDBREAK). Nie będziesz mógł tego zrobić, używając CDC::GetTextExtent.

+0

Czy występuje różnica wydajności między 'GetTextExtent' i' 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 
      ); 
Powiązane problemy