DC를 이용해 출력될 글자의 크기를 알아내는 방법이다.
해당 DC가 폰트를 가지고 있고, 실제로 출력될때 width, height를 구할 수 있다.
GetTextExtentPoint32
함수이다.
BOOL GetTextExtentPoint(
HDC hdc, // Device Context
LPCTSTR lpString, // 문자열
int cbString, // 문자열의 길이
LPSIZE lpSize // CSize 변수
);
주로 글자를 중앙에 위치시킬때 사용한다.
중앙점이 (x,y) 이면 (x-sz.cx/2 , y-sz.cy/2) 로 위치 시켜 정확하게 중앙에 글자를 출력할 수 있다.
아래는 사용 예시 이다.
CFont font;
font.CreateFont( // object의 생성
0, // 문자 폭
12, // 문자 높이
0, // 기울기 각도
0, // 문자 방향
FW_HEAVY, // 문자 굵기
FALSE, // 문자 기울림 모양
FALSE, // 밑 줄
FALSE, // 취소선
DEFAULT_CHARSET, // 문자 셋
OUT_DEFAULT_PRECIS, // 출력 정확도
CLIP_DEFAULT_PRECIS, // 킬립핑 정확도
DEFAULT_QUALITY, // 출력의 질
DEFAULT_PITCH, // 자간 거리
_T("Comic Sans MS") // 문자 모양
);
cdc.SelectObject(&font);
cdc.SetTextColor(RGB(255, 255, 255));
cdc.SetBkColor(TRANSPARENT);
CString percentage;
percentage.Format(_T("%d%%"), this->progress);
CSize sz;
::GetTextExtentPoint32(cdc, percentage, percentage.GetLength(), &sz);
cdc.TextOut((midRect.left + midRect.right) / 2-sz.cx/2, midRect.top+30+abs(sz.cy-30)/2, percentage);
GetTextExtentPoint
함수도 있는데, 이는 16-bit 윈도우에서 사용하던 함수이다.
따라서 GetTextExtentPoint32
를 불러야 한다.
https://msdn.microsoft.com/ko-kr/library/windows/desktop/dd144937(v=vs.85).aspx