TextOut는 너무 단순하다. 이보다 조금 더 복잡한(=기능이 많은) 문자열 출력 함수로 DrawText라는 함수가 있다. int DrawText( HDC hDC, LPCTSTR lpString, int nCount, LPRECT lpRect, UINT uFormat );이 함수는 사각영역을 정의하여 영역안에 문자열을 출력할 수 있으며 여러가지 포멧을 설정할 수 있는 기능이 있다. 윈도우즈에서 사각영역을 정의할 때는 RECT구조체를 사용하며 다음과 같이 정의되어 있다. typedef struct _RECT { // rc LONG left; LONG top; LONG right; LONG bottom; } RECT; DrawText의 4번째 인수는 이 구조체의 포인터이며 문자열이 출력될 사각 영역을 지정한다. 첫번째 인수는 물론 hdc이며 두번째 인수가 출력할 문자열, 세번째 인수는 출력할 문자열의 길이이되 이 값이 -1이면 널 종료 문자열로 간주한다. 다섯 번째 인수 uFormat은 DrawText 함수가 문자열을 출력할 방법을 지정하는 플레그이다.
WM_PAINT의 코드를 다음과 같이 바꾸어 보자. long FAR PASCAL WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam) { HDC hdc; PAINTSTRUCT ps; RECT rt={100,100,400,300}; char str[]="님은 갔습니다. 아아 사랑하는 나의 님은 갔습니다. 푸른 산빛을 " "깨치고 단풍나무 숲을 향하여 난 작은 길을 걸어서 차마 떨치고 갔습니다." "황금의 꽃같이 굳고 빛나던 옛 맹세는 차디찬 티끌이 되어 한숨의 미풍에" "날아갔습니다."; switch(iMessage) { case WM_DESTROY: PostQuitMessage(0); return 0; case WM_PAINT: hdc=BeginPaint(hWnd,&ps); DrawText(hdc,str,-1,&rt,DT_CENTER | DT_WORDBREAK); EndPaint(hWnd,&ps); return 0; } return(DefWindowProc(hWnd,iMessage,wParam,lParam)); } 사각역역 rt를 (100,100)-(400,300)으로 정의하고 출력할 문자열 str에 긴 문자열을 대입해 두었다. 그리고 이 문자열의 끝까지 중앙 정렬 및 자동개행 플레그를 주어 출력하였다. 실행 결과는 다음과 같다. 지정한 사각영역안에 문자열이 자동 개행되며 여러줄로 출력되었다. 포멧을 바꾸어 가며 다양하게 실습해 보기 바란다. |