2017-05-02 3 views
1

두 개의 텍스트를 같은 텍스트의 일부로 MFC에서 하나씩 그려야합니다. 난 단지 그들이 그리는 것으로 시작해야하는 위치를 찾을 필요가 있기 때문에MFC에서 개별 텍스트를 하나씩 그리는 방법은 무엇입니까?

CString text1 = "A text"; 
CString text2 = "A second text"; 
CString textToDraw = text1 + text2; 
CDC* dc = GetDC(); //assume that this is initialized elsewhere 
dc->TextOut(0, 0, textToDraw); 

하나로서 모두 텍스트를 그릴 간단하다 : 그들은 단지 하나의 문자열이기 때문에 지금은 그들을 그리기입니다.

dc->TextOut(0, 0, text1); 
int X; 
//how should I compute X...? 
dc->TextOut(X, 0, text2); 

: 내가 직면하고 문제는 새로운 X이 (가 알려진 길이를하지 않아도 본문이 실행시에 선택할 수있는 점을 고려) 두 번째 텍스트가 그리되어야하는 좌표를 계산하는 방법이다 받은 도움을 주셔서 감사합니다!

+0

쉬운 것은 아닙니다. 문자열을 연결하여 한 번에 렌더링 할 수없는 이유는 무엇입니까? 좀 더 자세히 설명 : 제안 된 대답은 텍스트가 차지하는 영역을 계산하지만 두 문자열이 만나는 문자 레이아웃은 고려하지 않습니다. 특히, [kerning] (https://en.wikipedia.org/wiki/Kerning)을 존중하지 않으며 문자열''A ''다음에''V "''를 렌더링하는 것은 문자열''렌더링 예를 들어 AV ""입니다. – IInspectable

+0

@IInspectable 답장을 보내 주셔서 감사합니다! 텍스트를 별도의 텍스트로 인쇄해야하는 이유는 서로 다른 의미를 지니고 있기 때문입니다. 특별한 경우에는 굵게 표시해야하고 다른 경우에는 표시하지 않아야합니다. 왜 mfc가 텍스트의 두 개의 개별 부분을 하나씩 인쇄 할 수있는 쉬운 방법을 제공하지 않는지 모르겠습니다. 나는 이것을 요구하고있어 미안하지만 나는 MFC에 머물러있는 프로젝트에서 일하고있다. – meJustAndrew

+0

상당히 드문 유스 케이스이며 MFC는 생각할 수있는 문제에 대한 해답을 제시하지 않습니다. 그것은 당신이 텍스트의 크기를 측정 할 수있게 해준다. 더 복잡한 형식의 텍스트를 출력해야하는 경우 언제든지 [CRichEditCtrl] (https://msdn.microsoft.com/en-us/library/68730ktd.aspx)을 선택할 수 있습니다. – IInspectable

답변

4

당신은 실제로 텍스트를 그리지 않고 차지할 것 높이 텍스트를 계산하는 DT_CALCRECT 플래그 DrawText에()를 사용할 수 있습니다. 다음은 귀하의 질문에 대한 답변 일 수 있습니다.

dc->TextOut(100, 100, text1); 

RECT rect = { 0, 0, 0, 0 }; 
dc->DrawText(text1, &rect, DT_CALCRECT); 

dc->TextOut(100 + rect.right, 100, text2); 
관련 문제