2011-09-08 1 views
3

CDC를 사용하거나 디스플레이와 링크되어 있지 않은 CDC를 사용하지 않고, 캐릭터 라인의 폭을 픽셀 단위로 취득 할 수있는 방법이 있습니까? 문자열 너비를 검색해야하는 클래스는 CWnd :: GetDC()를 사용하기 위해 CWnd에서 상속하지 않으며 기존 CDC를 함수에 전달할 방법이 없습니다.CDC를 사용하지 않는 MFC 캐릭터의 폭

디스플레이와 연결되지 않은 더미 CDC를 만들려고했지만 MFC가 충돌합니다. 이상적으로는 다음과 같습니다 :

m_font = new CFont(); 
m_font->CreatePointFont(size * 10, _T("Arial")); 

m_tempCDC = new CDC(); 
m_tempCDC->SelectObject(m_font); 

return m_tempCDC->GetOutputTextExtent(_T("Test")).cx; 

EDIT : 문자열 리터럴의 글꼴 이름 변수를 대체해야합니다.

답변

6

글꼴의 너비는 픽셀로 변환되는 방법에 따라 다르며 글꼴이 렌더링되는 장치에 따라 다릅니다. 예를 들어 프린터 대 모니터에서는 분명히 다릅니다. 이것이이 기능을 위해 DC가 필요한 이유입니다.

CDC::FromHandle(::GetDC(NULL))을 사용하여 데스크톱의 DC를 얻을 수 있습니다.

0

너가 너가 사용해야하는 글꼴을 모르는 경우 너는 너비를 어떻게 계산할 수 있니?

필요한 너비가 필요한 곳에서 너비를 계산하고이 너비가 필요한 곳으로 클래스를 전달하는 것이 좋습니다.

+0

글꼴을 알고 있습니까? CFont 객체 m_font? – CD1212