DrawText

원형 int DrawText(HDC hDC, LPCTSTR lpString, int nCount, LPRECT lpRect, UINT uFormat);
원형

virtual int CDC::DrawText( LPCTSTR lpszString, int nCount, LPRECT lpRect, UINT nFormat );
int CDC::DrawText( const CString& str, LPRECT lpRect, UINT nFormat );

인수

▶hDC:DC핸들

▶lpString:출력할 문자열. nCount가 -1이면 널 종료 문자열이어야 한다.

▶nCount:문자열을 길이. -1일 경우 널 종료 문자까지를 문자열 길이로 계산한다.

▶lpRect:문자열을 출력할 시각영역

▶uFormat:출력 옵션.

플레그 설명
DT_BOTTOM 텍스트를 사각 영역의 바닥에 출력한다. DT_SINGLELINE 플레그가 설정되어 있을 때만 사용할 수 있다.
DT_CALCRECT 문자열을 출력할 수 있는 사각 영역을 계산한다. 문자열이 여러줄로 되어 있으면 사각 영역의 바닥(bottom)을 확장하여 모든 문자열이 다 포함되도록 하며 문자열이 한줄로 되어 있으면 사각 영역의 오른쪽(right)을 확장한다. 이 플레그가 주어지면 실제 문자열은 출력되지 않고 계산만 해 준다.
DT_CENTER 수평 중앙 정렬
DT_EDITCONTROL 멀티 라인 에디트 컨트롤과 같은 방식으로 문자열을 출력한다. 문자의 수평폭을 계산하는 방법이 에디트 컨트롤과 동일하며 마지막 줄의 일부가 보이지 않을 경우 출력하지 않는다.
DT_END_ELLIPSIS 문자열 끝이 사각 영역을 넘을 경우 문자열은 자르고 생략 기호(...)을 대신 보여준다. 단어가 잘릴 경우는 생략 기호를 붙이지 않는다.
DT_EXPANDTABS 탭 문자를 확장하여 8문자 너비로 만든다.
DT_EXTERNALLEADING 일반적으로 폰트 높이에 External Leading은 제외되는데 이 플레그가 주어지면 폰트 높이에 External Leading을 포함시킨다.
DT_HIDEPREFIX 2000이상:&문자를 무시하며 &다음 문자에 밑줄이 그어지지 않는다.
DT_INTERNAL 시스템 폰트를 사용하여 텍스트 메트릭을 계산한다.
DT_LEFT 수평 왼쪽 정렬
DT_MODIFYSTRING 문자열을 출력된 모양대로 변경한다. DT_END_ELLIPSIS, DT_PATH_ELLIPSIS 플레그와 함꼐 사용되며 그 외의 경우는 아무런 효과가 없다.
DT_NOCLIP 클리핑없이 문자열을 출력한다. 그래서 문자열이 사각형 밖으로 벗어나도 자르지 않고 그냥 출력된다.
DT_NOFULLWIDTHCHARBREAK DBCS환경에서 자동 개행 방법을 SBCS와 동일하게 설정한다.
DT_NOPREFIX &문자를 그대로 출력한다.
DT_PATH_ELLIPSIS 문자열 끝이 사각 영역을 넘을 경우 문자열의 중간을 생략 기호로 바꾸어 사각 영역에 맞게 조정한다. 문자열 내부에 \문자가 있을 경우 마지막 \이후의 문자를 최대한 보존해 준다.
DT_PREFIXONLY 2000이상:&문자가 있는 위치에 밑줄만 출력한다. 텍스트는 출력되지 않는다.
DT_RIGHT 수평 오른쪽 정렬
DT_RTLREADING hdc에 선택된 폰트가 Hebrew 또는 Arabic 폰트인 경우 오른쪽에서 왼쪽으로 문자열을 출력한다.
DT_SINGLELINE 문자열을 무조건 한줄로만 출력한다. CR, LF코드가 있어도 개행되지 않는다.
DT_TABSTOP 탭 정지점을 설정한다. uFormat인수의 8~15비트(하위 워드의 상위 바이트)가 탭 정지점 설정에 사용되며 디폴트를 8문자이다.
DT_TOP 텍스트를 사각 영역의 윗쪽에 출력한다.
DT_VCENTER 수직 중앙 정렬한다.
DT_WORDBREAK 단어가 사각형의 오른쪽 변에 닿았을 경우 자동 개행한다. CR/LF 조합은 강제로 개행시킨다.
DT_WORD_ELLIPSIS 사각 영역을 넘을 경우 단어를 자르고 생략 기호를 붙인다.

 

리턴 출력한 텍스트의 높이가 리턴된다. DT_VCENTER나 DT_BOTTOM 플레그가 지정되었으면 리턴값은 lpTect->top에서부터 바닥까지의 오프셋값이다. 실패하면 0을 리턴한다.
설명

문자열을 사각 영역 내부에 출력하며 사각 영역 외부로는 출력을 하지 않는다. 단, DT_NOCLIP 플레그가 설정된 경우는 예외적으로 사각 영역 바깥으로도 출력을 할 수 있다. DT_SINGLELINE 플레그가 설정된 경우를 제외하고 문자열이 여러줄로 구성된 것으로 간주한다. TextOut 함수에 비해 여러 줄을 한꺼번에 출력할 수 있다.

출력에 사용할 폰트와 문자열의 색상, 배경 색상은 TextOut 함수와 마찬가지로 DC에 선택된 글꼴과 색상 설정을 따른다. 그러나 SetTextAlign으로 정렬 상태를 변경할 수는 없으며 Escapement, Orientation이 0이 아닌 글꼴, 즉 기울어진 글꼴은 출력할 수 없다.

예제 1

다음 예제는 DrawText 함수로 긴 문자열을 사각 영역에 맞추어 출력한다.

LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam)
{
	HDC hdc;
	PAINTSTRUCT ps;
	char *szText=
		"동해물과 백두산이 마르고 닳도록 하느님이 보우하사 우리나라 만세 "
		"무궁화 삼천리 화려강산 대한사람 대하으로 길이 보전하세 "
		"남산위의 저 소나무 철갑을 두른 듯 바람서리 불변함을 우리 기상일세 "
		"가울하늘 공활한데 높고 구름없이 밝은 달은 우리 가슴 일편 단심일세 "
		"이 기상과 이 맘으로 충성을 다하여 괴로우나 즐거우나 나라 사랑하세 ";
	RECT rt;

	switch(iMessage) {
	case WM_PAINT:
		hdc=BeginPaint(hWnd, &ps);
		SetRect(&rt,10,10,400,200);
		DrawText(hdc,szText,-1,&rt,DT_WORDBREAK);
		EndPaint(hWnd, &ps);
		return 0;
	case WM_DESTROY:
		PostQuitMessage(0);
		return 0;
	}
	return(DefWindowProc(hWnd,iMessage,wParam,lParam));
}

긴 문자열을 사각 영역 내부에만 출력하도록 했다. DT_WORDBREAK 플레그를 주지 않으면 이 문장은 한줄로 길게 출력된다.

참고함수 Textout, DrawTextEx
플렛폼 95이상
참조  

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