[Visual C++] 글자의 가로,세로 길이

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