SetTextAlign

원형 UINT SetTextAlign(HDC hdc, UINT fMode);
MFC 원형 UINT CDC::SetTextAlign( UINT nFlags );
인수

▶hdc:DC핸들

▶fMode:정렬 방식과 CP사용 여부 등의 플래그를 지정한다. 정렬 방식은 수평, 수직에 대해 각각 한 종류만 선택할 수 있다.

플래그 설명
TA_BLASELINE 텍스트의 기준선에 정렬
TA_BOTTOM 수직 하단 정렬
TA_TOP 수직 상단 정렬
TA_CENTER 수평 중앙 정렬
TA_LEFT 수평 왼쪽 정렬
TA_RIGHT 수평 오른쪽 정렬
TA_NOUPATECP 문자열이 출력된 후 CP는 변경되지 않는다.
TA_RTLREADING 문자열을 오른쪽에서 왼쪽으로 출력한다. 한글 윈도우즈에서는 의미가 없다.
TA_UPDATECP 문자열 출력 좌표 CP를 사용하며 문자열 출력 후 CP를 갱신한다.

 

리턴 이전 정렬 상태를 리턴한다.
설명

TextOut 함수가 지정하는 좌표는 디폴트로 문자열 출력 영역의 좌상단 좌표이다. 이 함수는 문자열의 출력 영역과 출력 좌표와의 관계를 변경함으로써 문자열의 출력 위치에 영향을 준다.

예제 1

다음 예제는 수평 정렬 상태를 변경해 가며 문자열을 출력한다.

LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam)
{
	HDC hdc;
	PAINTSTRUCT ps;
	char *szText="Text Alignment Sample";

	switch(iMessage) {
	case WM_PAINT:
		hdc=BeginPaint(hWnd, &ps);
		// 왼쪽 정렬
		SetTextAlign(hdc,TA_LEFT);
		TextOut(hdc,200,10,szText,lstrlen(szText));

		// 중앙 정렬
		SetTextAlign(hdc,TA_CENTER);
		TextOut(hdc,200,40,szText,lstrlen(szText));

		// 오른쪽 정렬
		SetTextAlign(hdc,TA_RIGHT);
		TextOut(hdc,200,70,szText,lstrlen(szText));
		EndPaint(hWnd, &ps);
		return 0;
	case WM_DESTROY:
		PostQuitMessage(0);
		return 0;
	}
	return(DefWindowProc(hWnd,iMessage,wParam,lParam));
}

TextOut 함수는 수평 위치를 모두 200으로 지정하고 있지만 정렬 플레그에 따라 문자열이 출력되는 실제 위치가 달라진다. 첫번째 출력문은 200을 사각 영역의 왼쪽으로 인식하며 두번째 출력문은 200을 중앙으로, 마지막 출력문은 200을 왼쪽으로 인식한다.

예제 2

SetTextAlign은 정렬 방법뿐만 아니라 CP 사용 방법도 설정한다. CP(Current Position)는 다음 문자열이 출력될 위치를 가리키며 최초 DC가 생성되었을 때는 (0,0)으로 초기화된다. SetTextAlign 함수로 TA_UPDATECP 플레그를 주면 TextOut 함수는 인수로 전달되는 좌표값을 무시하고 현재 CP위치에 문자열을 출력하며 문자열 출력 후 CP를 문자열의 끝으로 재설정한다. 따라서 CP위치에 문자열을 출력하면 연속된 단어를 계속 출력할 수 있다. 다음 예제는 세 단어를 이어서 출력한다.

long FAR PASCAL WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam)
{
	HDC hdc;
	PAINTSTRUCT ps;

	switch(iMessage) {
	case WM_DESTROY:
		PostQuitMessage(0);
		return 0;

	case WM_PAINT:
		hdc=BeginPaint(hWnd,&ps);
		SetTextAlign(hdc, TA_UPDATECP);
		TextOut(hdc,0,0,"One ",4);
		TextOut(hdc,0,0,"Two ",4);
		TextOut(hdc,0,0,"Three",5);
		EndPaint(hWnd,&ps);
		return 0;
	}
	return(DefWindowProc(hWnd,iMessage,wParam,lParam));
}

One, Two, Three 단어를 각각 출력하되 이 때 TextOut 함수로 전달되는 출력 좌표는 무시되며 무조건 CP 위치에 문자열이 출력된다. 결과는 다음과 같다.

참고함수 GetTextAlign : 현재 정렬 상태를 조사한다.
플렛폼 95이상
참조 3-2-가

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