CDC 의 instance 나 CDC 를 상속받은 클래스에서 글자를 출력할 때 글자의 크기를 픽셀 단위로 반환해 주는 함수는 GetTextExtent 이다. 사용법은 매우 간단하다.
CSize CDC::GetTextExtent(LPCTSTR lpszString, int nCount) const;
CSize CDC::GetTextExtent(const CString& str) const;
중 하나를 사용하면 된다. 그러면 [str]을 출력하기 위해 필요한 글자의 크기를 pixel 단위로 반환받을 수 있다. 간단한 사용 예를 살펴 보면 다음과 같다.
int x = margin_left + static_cast<int>(0.5 + i*(bar_width/(tick_num - 1.0))); int y = line_y; pDC->MoveTo(x,y); pDC->LineTo(x,y+space_between_line_text); CString str; str.Format(_T("%.1f"),value); CSize font_size = pDC->GetTextExtent(str); int font_x = margin_left + static_cast<int>(0.5 + i*(bar_width/(tick_num - 1.0)) - 0.5*font_size.cx); int font_y = line_y + space_between_line_text; pDC->TextOut(font_x, font_y, str);
위는 주로 텍스트의 가운데 맞춤을 할 때 필요한데, 지정한 좌표가 정확히 글자의 가운데가 되게 하기 위해서는 글자의 크기를 알아야 하기 때문이다. 공식이랄 것도 없이, 주어진 좌표 (x,y)에 CSize sz pixel 인 글자의 x 축의 값이 [x] 가 되게 하기 위해서는
int font_x = static_cast<int>(0.5 + x - 0.5*sz.cx);
로 하면 되겠지. 이런 식으로 글자를 정가운데 맞춤을 해서 출력한 결과의 예는 다음과 같다.
아래의 숫자들이 tick 의 정가운데에 위치해 있는 것을 볼 수 있다.
느무느무 간단한 것이지만 유입 검색어가 종종 있어서 작성한다. 글자의 위치를 픽셀 단위로 조절할 일이 많아서 위 작업은 의외로 자주 하게 된다. 왼쪽/오른쪽 맞춤을 해야 할 때도 자주 있고...
'컴퓨터 > MFC_API' 카테고리의 다른 글
CRichEditCtrl 에서 바탕색/글자색 설정하기 (0) | 2014.04.10 |
---|---|
파일 끌어 놓기 구현 (drag & drop)DragAcceptFiles(); (0) | 2014.01.03 |
unicode 와 ansi, std::string 과 CString 상호 변경하기 (3) | 2013.01.07 |
Pie (파이) 그래프를 그려 보자 (2) | 2013.01.05 |
CRichEditCtrl 사용하기 (1) | 2012.05.14 |