GetTextMetrics

원형

BOOL GetTextMetrics(HDC hdc, LPTEXTMETRIC lptm);

MFC 원형

BOOL CDC::GetTextMetrics( LPTEXTMETRIC lpMetrics ) const;

인수

▶hdc : DC의 핸들

▶lptm : 리턴값을 돌려받기 위한 TEXTMETRIC 구조체의 포인터

리턴

성공하면 0이 아닌 값을 리턴하며 실패하면 0을 리턴한다.

설명

DC에 현재 선택되어 있는 폰트의 여러 가지 정보를 조사한다. 주로 폰트의 크기에 대한 정보를 얻을 수 있다. 리턴되는 정보는 다음과 같이 선언되어 있는 구조체이다.

typedef struct tagTEXTMETRIC { // tm 
    LONG tmHeight; 
    LONG tmAscent; 
    LONG tmDescent; 
    LONG tmInternalLeading; 
    LONG tmExternalLeading; 
    LONG tmAveCharWidth; 
    LONG tmMaxCharWidth; 
    LONG tmWeight; 
    LONG tmOverhang; 
    LONG tmDigitizedAspectX; 
    LONG tmDigitizedAspectY; 
    BCHAR tmFirstChar; 
    BCHAR tmLastChar; 
    BCHAR tmDefaultChar; 
    BCHAR tmBreakChar; 
    BYTE tmItalic; 
    BYTE tmUnderlined; 
    BYTE tmStruckOut; 
    BYTE tmPitchAndFamily; 
    BYTE tmCharSet; 
} TEXTMETRIC;

각 멤버의 의미는 다음과 같다.

플래그

설명

tmHeight

문자의 높이다. tmAscent와 tmDescent를 더한 값이다.

tmAscent

기준 선의 윗쪽 높이이다.

tmDescent

기준 선의 아래쪽 높이이다.

tmInternalLeading

tmHeight 안쪽의 여백 공간이다. 이 부분은 여백이며 실제 폰트가 그려지는 부분이 아니므로 문자열 출력에 의해 변경되지 않는 영역이다. 폰트 디자이너는 이 값을 0으로 설정해야 한다.

tmExternalLeading

tmHeight에는 포함되지 않는 여백이며 문자열간의 줄간을 띄울 때 사용하는 부분이다. 실제 폰트가 그려지는 부분이 아니므로 문자열 출력에 의해 변경되지 않는다.

tmAveCharWidth

문자들의 평균 폭이다.

tmMaxCharWidth

최대 문자 폭이다.

tmWeight

폰트의 두께

tmOverhang

볼드, 이탤릭 등의 강조에 의해 추가되는 여분의 폭이다. GDI는 이탤릭체 등과 같이 좌우로 좀 더 큰 폭을 가져야 하는 문자열을 출력할 때 원래 문자폭에 약간의 여분을 더 준다. 이 여분의 폭을 Overhang이라 한다.

tmDigitizedAspectX

폰트가 만들어진 장치의 수평 종횡비 값

tmDigitizedAspectY

폰트가 만들어진 장치의 수직 종횡비 값. 수평, 수직 종횡비 값의 비가 종횡비이다.

tmFirstChar

폰트에 정의된 첫 번째 문자

tmLastChar

폰트에 정의된 마지막 문자

tmDefaultChar

폰트에 정의되지 않은 문자를 출력할 때 사용되는 디폴트 문자. 보통 마침표나 사각박스가 사용된다.

tmBreakChar

자동 개행과 justification에 사용되는 구분 문자. 보통 스페이스이다.

tmItalic

이탤릭 스타일이 있으면 0이 아닌 값을 가진다.

tmUnderlined

밑줄 스타일이 있으면 0이 아닌 값을 가진다.

tmStruckOut

취소선 스타일이 있으면 0이 아닌 값을 가진다.

tmPitchAndFamily

피치와 패밀리

tmCharSet

문자 셋

예제 1

다음 예제는 세 줄의 문자열을 출력한다.

int CharHeight;
char str[3][20]={"첫번째 줄입니다", "두번째 줄입니다", "세번째 줄입니다"};
LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam)
{
	PAINTSTRUCT ps;
	HDC hdc;
	TEXTMETRIC tm;
	int i;

	switch(iMessage) {
	case WM_CREATE:
		hdc=GetDC(hWnd);
		GetTextMetrics(hdc, &tm);
		CharHeight=tm.tmHeight;
		ReleaseDC(hWnd, hdc);
		return 0;
	case WM_PAINT:
		hdc=BeginPaint(hWnd, &ps);
		for (i=0;i<3;i++) {
			TextOut(hdc,0,i*CharHeight,str[i],strlen(str[i]));
		}
		EndPaint(hWnd, &ps);
		return 0;
	case WM_DESTROY:
		PostQuitMessage(0);
		return 0;
	}
	return(DefWindowProc(hWnd,iMessage,wParam,lParam));
}

폰트의 높이를 정확하게 계산해서 사용했으므로 정확한 줄간을 띄웠다.

참고함수

GetTextExtentPoint32

플랫폼

95이상

참조

 


written by http://www.winapi.co.kr