[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