글꼴에 따른 문자열을 출력하는 코드이다.
프로젝트명은 TextOutDemo 이며
속성은 전과 같은 SDI 이다.
/////////////////////////////////////////////////////
void CTextOutDemoView::OnPaint()
{
CPaintDC dc(this); // device context for painting
int nY = 0;
CFont Font;
CFont* pOldFont;
LOGFONT lf;
::ZeroMemory(&lf, sizeof(lf));
wsprintf(lf.lfFaceName,TEXT("%s"), TEXT("Arial"));
//wsprintf 는 우측의 내용을 좌측에 출력하는 함수이다.
//위에 있는 코드의 내용은 lf의 글꼴명을 Arial로 한다 라는 코드이다.
for(int i = 10; i<25;i++)
{
lf.lfHeight= i;
nY +=i;
Font.CreateFontIndirect(&lf);
//Arial, 크기 10~24 까지 폰트 객체를 생성한다.
pOldFont = dc.SelectObject(&Font);
dc.TextOut(10,nY,TEXT("Test String!")); //왼쪽에서 10 의 거리 위에서부터 nY의 거리의 지점에 텍스트를 출력한다.
dc.SelectObject(pOldFont); //폰트값을 초기화한다.
//생성된 폰트로 Test String! 이라는 문자열을 출력한다.
Font.DeleteObject();
//폰트 객체를 삭제한다.
}//반복한다.
}
///////////////////////////////////////
출력화면
x좌표는 고정되고 y좌표와 글씨 크기가 변경되어 출력되는 화면이 나온다.
////////////////////////////////////////////////////////////////////////////////////////
다음으로는 좀 더 정교한 출력을 위한 코드이다.
여러 글꼴의 속성에관한 멤버들을 사용한 코드이다.
내용은 주석으로 처리해두었으니 그걸 보면 된다.
출력하면 코딩된 속성이 다 들어가버린 문자열이 나온다.
다음은 탭 이 먹히는 텍스트 아웃 과 먹히지 않는 텍스트 아웃의 비교 코드이다.
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
출력화면
\\\\\\\\\\\\\\\\\\\\\\\
tabbedtextout 을 사용하면 \t 의 기능이 작동하여 출력되고
그냥 textout을 사용하면 \t가 있어도 작동하지 않는다. 그 외의 특별한 내용은 없는 코드.
그냥 텍스트 아웃과 다른점은 출력시에 문자열 뿐만이 아닌 탭의 크기도 넣어주어야 한다는 것이다.
여기까지 프로젝트 파일의 업로드.
///////////////////////////////////////
출력화면
x좌표는 고정되고 y좌표와 글씨 크기가 변경되어 출력되는 화면이 나온다.
////////////////////////////////////////////////////////////////////////////////////////
다음으로는 좀 더 정교한 출력을 위한 코드이다.
void CTextOutDemoView::OnPaint()
{
CPaintDC dc(this); // device context for painting
int nY = 50;
CFont Font;
CFont* pOldFont;
LOGFONT lf;
::ZeroMemory(&lf, sizeof(lf));
wsprintf(lf.lfFaceName,TEXT("%s"), TEXT("Arial"));
//wsprintf 는 우측의 내용을 좌측에 출력하는 함수이다.
//위에 있는 코드의 내용은 lf의 글꼴명을 Arial로 한다 라는 코드이다.
lf.lfHeight = 24; //글꼴의 높이를 픽셀 단위로 정하는 멤버. 값이 0이면 기본크기로 결정.[음수 사용해도 절대값으로 계산됨]
lf.lfWidth = 24; //문자간의 장평을 결정하는 멤버
lf.lfOrientation = 50; //글자의 각도를 0.1도 단위로 명시하는 멤버
lf.lfEscapement = 50; //문자열의 기울기를 0.1도 단위로 명시하는 멤버
lf.lfWeight = FW_BOLD; //글꼴의 굵기를 명시하는 멤버, 보통 0 부터 900까지의 값이며 값은 100단위로 증가.
//보통 일반 글꼴은 400(FW_NORMAL)정도이며 흔히들 굵게 로 하는것은 700(FW_BOLD) 정도 라고 함.
lf.lfItalic = true; //이탤릭체 유무
lf.lfUnderline = true; // 밑줄 유무
lf.lfStrikeOut = true; //취소줄 유무.
Font.CreateFontIndirect(&lf);
//Arial, 크기 10~24 까지 폰트 객체를 생성한다.
pOldFont = dc.SelectObject(&Font);
dc.TextOut(100,nY,TEXT("Test String!")); //왼쪽에서 10 의 거리 위에서부터 nY의 거리의 지점에 텍스트를 출력한다.
dc.SelectObject(pOldFont);
//생성된 폰트로 Test String! 이라는 문자열을 출력한다.
Font.DeleteObject();
//폰트 객체를 삭제한다.
}
여러 글꼴의 속성에관한 멤버들을 사용한 코드이다.
내용은 주석으로 처리해두었으니 그걸 보면 된다.
출력하면 코딩된 속성이 다 들어가버린 문자열이 나온다.
다음은 탭 이 먹히는 텍스트 아웃 과 먹히지 않는 텍스트 아웃의 비교 코드이다.
void CTextOutDemoView::OnPaint()
{
CPaintDC dc(this); // device context for painting
CFont Font;
CFont* pOldFont;
LOGFONT lf;
::ZeroMemory(&lf,sizeof(lf));
lf.lfHeight = 36;
wsprintf(lf.lfFaceName, TEXT("%s"),TEXT("Arial"));
Font.CreateFontIndirect(&lf);
pOldFont = dc.SelectObject(&Font);
dc.TextOutW(20,20, TEXT("\tTest String!"));
//TextOut 을 이용하면 그냥 출력되며 '\t'가 반영되지 않는다.
int nTabStop = 40;
dc.TabbedTextOut(20,70,TEXT("\tTest String!"),1, &nTabStop, 20);
dc.TabbedTextOut(20,120,TEXT("\t\tTest String!"),1, &nTabStop, 20);
//TabbedTextOut를 이용하면 '\t' 가 들어간 문자열이 출력된다.
dc.SelectObject(pOldFont);
}
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
출력화면
tabbedtextout 을 사용하면 \t 의 기능이 작동하여 출력되고
그냥 textout을 사용하면 \t가 있어도 작동하지 않는다. 그 외의 특별한 내용은 없는 코드.
그냥 텍스트 아웃과 다른점은 출력시에 문자열 뿐만이 아닌 탭의 크기도 넣어주어야 한다는 것이다.
여기까지 프로젝트 파일의 업로드.
'공부 > MFC' 카테고리의 다른 글
Visual C++ 2008 MFC Chapter 7 GDI - 7 끝부분.. 으으. (0) | 2011.12.05 |
---|---|
Visual C++ 2008 MFC Chapter 7 GDI - 7 컨트롤 버튼 구현 (2) | 2011.12.02 |
Visual C++ 2008 MFC Chapter 7 GDI - 5 실습 예제 (0) | 2011.12.02 |
Visual C++ 2008 MFC Chapter 7 GDI - 5 도형 그리기 (2) | 2011.12.02 |
Visual C++ 2008 MFC Chapter 7 GDI - 4 사용자 정의 선과 브러쉬 (0) | 2011.12.01 |