본문 바로가기

공부/MFC

Visual C++ 2008 MFC Chapter 7 GDI - 7 끝부분.. 으으.


뜬금없지만 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);

출력화면.

 

마지막으로 사용한 파일 업로드 까지 마치면 이번 글도 끝. 

 


**공부에 도움이 되었다면 손가락 버튼을 클릭해주심 좋겠습니다.**