뜬금없지만 DrawText()의 원형을 보자.
TextOut()함수와 더불어 자주 문자열을 출력하는 함수로 쓰인다.
이 함수는 다양한 옵션을 정하여 문자열을 출력해주는 함수이다.
========================================================
virtual int DrawText(LPCTSTR lpszString, int nCount, LPRECT lpRect, UINT nFormat);
int DrawText(const CString& str, LPRECT lpRect, UINT nFormat);
========================================================
첫번쨰는 TextOut() 함수처럼 출력할 문자열의 길이를 명시하지만
일반적으로는 두번째 원형을 사용한다고 한다.
str인자는 출력할 문자열이며, lpRect인자는 문자열을 출력할 대상 사각형의 좌표가 된다.
이전 글의 예제에는 이 사각형의 좌표가 m_BtnRect(CRect)인 경우가 있었다.
nFormat 인자에는 출력의 옵션이 들어가게 된다. 이 옵션값에 따라 출력할때의 모양이 달라지게 되며 이것이
가장 이 함수에서 중요하다고 할 수 있다.
프로젝트명을 DrawTextDemo로 하고 SDI문서를 평소의 속성대로 정해준 후
OnPaint() 핸들러 함수를 만들고 다음과 같이 코딩을 해보자.
///////////////////////////////////////////////
void CDrawTextDemoView::OnPaint()
{
CPaintDC dc(this); // device context for painting
// TODO: 여기에 메시지 처리기 코드를 추가합니다.
// 그리기 메시지에 대해서는 CView::OnPaint()을(를) 호출하지 마십시오.
CRect Rect(50,50,250,100);
dc.FillSolidRect(&Rect, RGB(192,192,192));
CFont Font;
LOGFONT lf;
::ZeroMemory(&lf, sizeof(lf));
lf.lfHeight = 24;
wsprintf(lf.lfFaceName, TEXT("%s"), TEXT("Arial"));
Font.CreateFontIndirect(&lf);
CFont* pOldFont = dc.SelectObject(&Font);
dc.SetTextColor(RGB(192,0,0));//문자열의 색상을 붉은색으로 바꾼다.
dc.DrawText(TEXT("Test button"), &Rect, DT_CENTER | DT_SINGLELINE | DT_VCENTER);
dc.SelectObject(pOldFont);
}
////////////////////////////////////////이 코드에서 잘 봐야하는점은 역시 DrawText 쪽이다. 속성이 3가지 주어져 있음을 알 수 있다.
첫번째 센터 는 중앙정렬, 두번째는 제어 문자 \n을 처리해주는 것, 세번째는 세로로도 중앙정렬을 하라는 속성이다.
출력 화면은 다음과 같다.
세로로 중앙정렬을 하여 출력할 것이라면 반드시 한 행만 출력해야 한다고 한다.
다음으로는 적용 가능한 다른 옵션에 따른 출력방식이다.
DT_BOTTOM | DT_SINGLELINE | DT_RIGHT 조합인 경우에는 다음과 같으며
DT_BOTTOM의 경우도 마찬가지로 DT_SINGLELINE 을 써주어야 한다.
출력 문자열을 TEXT("Text\nbutton")으로 변경하고 옵션을 DT_RIGHT만 정의하면 다음과 같이 출력된다.
말줄임표 옵션은 두가지가 있다.
DT_END_ELLIPSIS 나 DT_PATH_ELLIPSIS 옵션이 바로 그것이다.
이유는 모르겠지만 DT_PATH_ELLIPSIS 는 작동이 이상하게 안되서..
DT_END_ELLIPSIS 만 출력화면을 나타내었다.[텍스트는 일부러 상자 범위 이상의 길이가 되어야 하므로 바꾸었다.]
마지막으로 DT_WORDBREAK 형식을 지정하면 다음행으로 단어단위의 줄바꿈이 이루어진다.
쓴 코드는 다음과 같다.
dc.DrawText(TEXT("This is the test string!!!!!!"), &Rect, DT_WORDBREAK);
출력화면.
마지막으로 사용한 파일 업로드 까지 마치면 이번 글도 끝.
**공부에 도움이 되었다면 손가락 버튼을 클릭해주심 좋겠습니다.**
'공부 > MFC' 카테고리의 다른 글
Visual C++ 2008 MFC Chapter 8 비트맵 및 이미지 처리 (0) | 2011.12.05 |
---|---|
Visual C++ 2008 MFC Chapter 7 GDI 실습예제 (0) | 2011.12.05 |
Visual C++ 2008 MFC Chapter 7 GDI - 7 컨트롤 버튼 구현 (2) | 2011.12.02 |
Visual C++ 2008 MFC Chapter 7 GDI - 6 글꼴과 문자열 (0) | 2011.12.02 |
Visual C++ 2008 MFC Chapter 7 GDI - 5 실습 예제 (0) | 2011.12.02 |