본문 바로가기

공부/MFC

Visual C++ 2008 MFC Chapter 7 GDI 실습예제

GDI는 양이 엄청 많지만

그러므로 더욱 실습예제를 해야만.. 이해도를 높일 수 있을 것 같다.

그러하다.. 

프로젝트명은 GDIEX

1번문제

"\t 이것은 실습을 위한 \n문자열입니다." 라는 문자열을 TextOut(), TabbedTextOut(), DrawText() 함수를 이용하여 각각 출력하는 예제를 작성해봅시다.

- 이 문제에서 일단 \t와 \n때문에 TabbedTextOut(), DrawText() 을 써야함을 알 수 있다.


 바로 전에 작성한 코드의 형식을 빌려서 만들어 보았다.

 
=====================================================
void CGDIEXView::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 = 22;
wsprintf(lf.lfFaceName, TEXT("%s"), TEXT("Arial"));

Font.CreateFontIndirect(&lf);
CFont* pOldFont = dc.SelectObject(&Font);

dc.SetTextColor(RGB(192,0,0));//문자열의 색상을 붉은색으로 바꾼다.
//이하부분이 출력부분
int nTabStop = 40;
dc.TabbedTextOut(50,50, TEXT("\t 이것은 실습을 위한 "), 1, &nTabStop, 20);
dc.DrawText(TEXT("\n 문자열입니다."), &Rect, DT_LEFT);
//여기까지
dc.SelectObject(pOldFont);

}

======================================================= 

tabbedtextout을 사용하여 탭부분을 처리하고

drawtext를 사용하여 \n부분을 처리햇다.

출력화면은 다음과 같다.



2번 문제


1번의 출력을 이탤릭, 굵게, 밑줄  속성을 넣어보시오.


이부분은 간단하게 높이 속성을 정한 코드 아랫줄에  해당 속성들을 넣어주면 된다.

lf.lfItalic = 1;
lf.lfWeight = 700;
lf.lfUnderline = 1;


라고 적어주면 ok.


1번과 2번의 코딩 파일.




3번 문제 

다음 버튼은 전형적인 윈도우 xp스타일의 버튼 컨트롤 입니다. virtualButton예제의 코드를 수정하여 다음과 같은 모양을 하도록 수정해봅시다.


위 버튼은 OK

아래버튼에는 System Info 가 적힌 코드를 만드시오. 라는 글.

뭐 똑같게 만들진 않았지만

앞서 만든 버튼 만들기 코드에서 복사 붙여넣기를 통해 2번째 버튼을 만들어주면 쉽게 문제를 풀 수 있다.



크기가 안맞지만 이것은 수치만 변경하면 되는 문제이므로 생략.

코딩 파일 업로드




4번 문제

드래그를 통한 회색 색칠과 그 중앙에 자신의 이름을 출력하는 예제의 작성.

이것도

GDI내용에 있던 드래그 프로젝트 를 기반으로 짜면 될 성 싶다.

기반예제가 되는 소스를 보고싶으면 여기로.

http://www.inter6.com/tt/index.php?pl=661
 
나름대로 다른 제 게시글의 내용들과 짜집기를 통해 문제를 해결했습니다.

보면 한 도형이 아닌 생성된 도형들도 리스트에 집어넣고 계속 리프래쉬 시켜서

화면이 잘렸다가 복구되더라도 그림이 그대로 남아있게 하는 코드네요.

그 점을 잘 보시면 될 것 같습니다.

[뜬금없이 존댓말인 이유는 출처가 있는 자료이기때문.]

본격 본명 공개 파일. 그러하다.. 으으.