소개글
본 소스는 비주얼 스튜디오 2008로 만들어졌으며, MFC와 WINAPI의 기본 기능을 담은 실습 예제 소스코드입니다.문제에서 요구하는 조건(압축파일속에 포함)을 완전히 충족시켜서 만들었으며, 구현 기능은 다음과 같습니다.
1. 폰트가 다른 여러 텍스트를 화면에 출력
2. 특정 단축키를 누르면 사각형,삼각형,원 을 화면에 출력
3. 마우스 오른쪽 버튼을 누르면 화면에 출력된 도형에 색이 채워지거나, 비워짐
4. 마우스 왼쪽 버튼을 눌러 도형을 드래그 할 수 있음
5. 특정 단축키를 누르면 사전에 준비한 BMP파일이 배경에 깔리거나, 지워짐
6. 메뉴에 만든이의 정보를 볼수 있는 항목들이 있으며, 클릭시 대화상자로 해당 정보를 보여줌
7. 도형의 현재 좌표를 실시간으로 화면에 출력
MFC를 이용하여 작성된 소스이므로 주석을 별도로 달지 않았으며, 만든이의 정보는 프로젝트내의 리소스 편집기 -> 메뉴 편집과 다이얼로그 편집 항목을 이용하면 수정이 가능합니다. 또한 화면에 뿌려줄 BMP파일은 images/test.bmp 라는 이름으로 저장되어있으면 됩니다. (닷넷으로 직접 실행할 경우 프로젝트 하위에 images폴더 위치, 실행파일을 직접 실행할때는 실행파일이 있는 곳의 하위에 images폴더 위치시킴)
소스는 코드량이 좀 많더라도 초보가 짠것으로 가정하고, 최적화 없이 단순무식한 스타일로 작성되었습니다.
컴파일 실행환경
Visual Studio 2008본문내용
// exampleView.cpp : CexampleView 클래스의 구현//
#include "stdafx.h"
#include "example.h"
#include "exampleDoc.h"
#include "exampleView.h"
#include ".exampleview.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
// CexampleView
IMPLEMENT_DYNCREATE(CexampleView, CView)
BEGIN_MESSAGE_MAP(CexampleView, CView)
// 표준 인쇄 명령입니다.
ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)
ON_COMMAND(ID_BACKGROUND, OnBackground)
ON_COMMAND(ID_CIRCLE, OnCircle)
ON_COMMAND(ID_RECTANGLE, OnRectangle)
ON_COMMAND(ID_TRIANGLE, OnTriangle)
ON_WM_RBUTTONDOWN()
ON_WM_LBUTTONDOWN()
ON_WM_LBUTTONUP()
ON_WM_MOUSEMOVE()
END_MESSAGE_MAP()
// CexampleView 생성/소멸
CexampleView::CexampleView()
{
// TODO: 여기에 생성 코드를 추가합니다.
m_bTransparent = false;
m_colorText = RGB(0,0,0);
m_colorBk = RGB(255,255,255);
m_logFont.lfHeight = 50;
m_logFont.lfWidth = 0;
m_logFont.lfEscapement = 0;
m_logFont.lfOrientation = 0;
m_logFont.lfWeight = FW_BOLD;
m_logFont.lfItalic = false;
m_logFont.lfUnderline = false;
m_logFont.lfWidth = false;
m_logFont.lfCharSet = DEFAULT_CHARSET;
m_logFont.lfOutPrecision = OUT_CHARACTER_PRECIS;
m_logFont.lfClipPrecision = CLIP_CHARACTER_PRECIS;
m_logFont.lfQuality = DEFAULT_QUALITY;
m_logFont.lfPitchAndFamily = DEFAULT_PITCH | FF_DONTCARE;
m_logFont.lfStrikeOut = false;
strcpy(m_logFont.lfFaceName, _T("굴림"));
m_nX = 765;
m_nY = 123;
m_nState = 0;
m_bBk = false;
m_bDrag = false;
}
CexampleView::~CexampleView()
{
}
BOOL CexampleView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: CREATESTRUCT cs를 수정하여 여기에서
// Window 클래스 또는 스타일을 수정합니다.
return CView::PreCreateWindow(cs);
}
// CexampleView 그리기
void CexampleView::OnDraw(CDC* pDC)
{
CexampleDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;
// TODO: 여기에 원시 데이터에 대한 그리기 코드를 추가합니다.
Draw_BAEKYEONG(pDC);
Draw_SAKAKYEONG(pDC);
Draw_SAMKAKYEONG(pDC);
Draw_WON(pDC);
Draw_XY(pDC);
}
... 이하 생략.
압축파일 내 파일목록
MainFrm.cpp
MainFrm.h
ReadMe.txt
stdafx.cpp
stdafx.h
University.cpp
University.h
Subject.cpp
Subject.h
example.aps
example.rc
KorName.cpp
KorName.h
resource.h
Kor_Name.cpp
Kor_Name.h
Identity.cpp
Identity.h
example.h
example.cpp
exampleView.h
example.vcproj
example.sln
UpgradeLog.XML
exampleView.cpp
example.suo
res/example.ico
res/example.manifest
res/example.rc2
res/exampleDoc.ico
res/Toolbar.bmp
images/test.bmp
Debug/BuildLog.htm
Debug/example.exe
Debug/example.exe.embed.manifest
Debug/example.exe.embed.manifest.res
Debug/example.exe.intermediate.manifest
Debug/example.ilk
Debug/example.obj
Debug/example.pch
Debug/example.pdb
Debug/example.res
Debug/exampleDoc.obj
Debug/exampleView.obj
Debug/Identity.obj
Debug/Kor_Name.obj
Debug/MainFrm.obj
Debug/mt.dep
Debug/stdafx.obj
Debug/Subject.obj
Debug/University.obj
Debug/vc70.idb
Debug/vc70.pdb
Debug/vc90.idb
Debug/vc90.pdb
exampleDoc.cpp
exampleDoc.h
MainFrm.h
ReadMe.txt
stdafx.cpp
stdafx.h
University.cpp
University.h
Subject.cpp
Subject.h
example.aps
example.rc
KorName.cpp
KorName.h
resource.h
Kor_Name.cpp
Kor_Name.h
Identity.cpp
Identity.h
example.h
example.cpp
exampleView.h
example.vcproj
example.sln
UpgradeLog.XML
exampleView.cpp
example.suo
res/example.ico
res/example.manifest
res/example.rc2
res/exampleDoc.ico
res/Toolbar.bmp
images/test.bmp
Debug/BuildLog.htm
Debug/example.exe
Debug/example.exe.embed.manifest
Debug/example.exe.embed.manifest.res
Debug/example.exe.intermediate.manifest
Debug/example.ilk
Debug/example.obj
Debug/example.pch
Debug/example.pdb
Debug/example.res
Debug/exampleDoc.obj
Debug/exampleView.obj
Debug/Identity.obj
Debug/Kor_Name.obj
Debug/MainFrm.obj
Debug/mt.dep
Debug/stdafx.obj
Debug/Subject.obj
Debug/University.obj
Debug/vc70.idb
Debug/vc70.pdb
Debug/vc90.idb
Debug/vc90.pdb
exampleDoc.cpp
exampleDoc.h