2009-11-16 7 views
5

CButton의 텍스트 너비를 동적으로 조정하려고합니다. MFC에서이 작업을 수행 할 수있는 기본 제공 방법이 있습니까? 아니면 지정된 텍스트의 픽셀 너비를 계산하는 방법 (CWnd::SetWindowPos을 사용할 수 있도록)이 있습니까?MFC에서 텍스트 너비 가져 오기

답변

6

CDC::GetTextExtent을 사용하여 특정 글꼴의 텍스트 너비를 계산할 수 있습니다. CWnd::GetDC을 사용하여 텍스트를 표시하는 컨트롤에서 장치 컨텍스트를 가져옵니다.

6

지루합니다. 단추에 CWnd::GetFont()을 사용하여 사용중인 글꼴을 가져온 다음 CDC 개체에서 표준 글꼴 GetTextText을 사용하여 해당 글꼴을 선택해야합니다. 그것은 @ demoncodemonkey의 대답에 추가

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

같이 보입니다, 당신은 DT_CALCRECT 플래그 CDC::DrawText를 호출 할 수 있습니다. 이렇게하면 텍스트는 그려지지 않지만 함수에 넘겨주는 CRect는 그릴 텍스트의 너비와 높이를 갖게됩니다.

줄 바꿈 (DT_WORDBREAK 플래그 사용)을 사용하여 텍스트를 그리려는 경우 특히 유용합니다. CDC::GetTextExtent을 사용하여이를 수행 할 수 없습니다.

+0

'GetTextExtent'와'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 
      ); 
관련 문제