MFC 그림판

윈도우 프로그래밍 수업 텀 프로젝트로 개발한 그림판..

테스트가 많이 안되었고, 기능이 허접하긴 하지만....


1. 구현 기능

- File 메뉴 : 새파일, 저장, 열기

- View 메뉴 : 줌인, 줌아웃, 기본 보기

- Print 메뉴 : Print, Preview

- 전경, 배경 색깔 선택

- 펜툴 : 선굵기

- 채우기 툴

- 직선툴

- 원툴 : 선굵기, 채우기없음모드, 색채우기모드, 선없음모드

- 사각형툴 : 선굵기, 채우기없음모드, 색채우기모드, 선없음모드

- 다각형툴 : 선굵기, 채우기없음모드, 색채우기모드, 선없음모드

- 텍스트툴 : 폰트, 사이즈, 배경없음모드, 배경채우기모드

- 상태바 : 마우스 좌표 출력, 현재 선택 툴 출력

- 가속기 : 새창(Ctrl + N), 열기(Ctrl + O), 저장(Ctrl + S),

프린트(Ctrl + P), 줌인(Shift + I), 줌아웃(Shift + O), 줌기본(Shift + D)



2. 사용 방법

2.1 색상 선택

- 화면 상단의 다이얼로그바 왼쪽에 색깔 버튼 두개는 왼쪽부터 각각 전경색과 배경색을 지정하는 버튼이다. 버튼을 클릭하여 적절한 색상을 지정한다.

2.2 펜 툴

- 펜툴을 선택 후 1 ~ 100까지 적당한 선굵기를 설정 후 화면에 마우스왼쪽 버튼을 누르고 드래그 하여 그린다. 이때 선의 색깔은 전경색이 선택된다.

2.3 채우기 툴

- 채우기 툴을 선택 후 마우스 왼쪽 클릭으로 클릭한 영역을 전경색으로 채운다.

2.4 직선 툴

- 직선 툴을 선택 후 마우스 왼쪽버튼을 누르고 드래그 하여 적당한 지점에서 버튼을 뗀다. 이때 선굵기값이 적용되며, 선의 색깔은 전경색이 선택된다.

2.5 원 툴

- 전경색, 배경생, 선굵기, 도형모드(채우기 없음, 채우기, 선없음)을 선택 후 그리기를 원하는 지점에 마우스왼쪽 버튼을 누른 후 드래그하여 원을 그린다. 이때 마우스버튼을 누른지점을 중심부터 이동한 지점까지의 거리를 반지름으로 하는 원으로 그려진다. 또한 선색깔은 전경색이 선택되며, 도형모드가 채우기나 선없음 일때에는 내부 채우기색으로 배경색이 선택된다.

2.6 사각형 툴

- 원 그리기와 같은 방식으로 그리며, 각종 설정이 적용된다. 하지만 사각형은 마우스 왼쪽 버튼을 누른지점과 뗀 지점을 각 대각선 꼭지점으로 그린다.

2.7 다각형 툴

- 직선을 먼저 그리고 각 꼭지점이 될 지점을 클릭으로 다각형을 그려간다. 그리기를 끝내려면 더블클릭으로 그림그리기를 마친다.

2.8 텍스트 툴

- 폰트와 사이즈, 배경여부를 선택 후 원하는 지점에 마우스를 클릭하여 텍스트를 입력한다. 이때 글자색을 전경색이 선택되며, 글자 배경색은 배경색이 선택된다.

2.9 저장과 로드

- 저장과 열기 메뉴를 이용해서 그림을 저장하고, 불러온다.



설계 내용

 

1. Class Diagram 및 설명

 

1.1 CMainFrame, CYKPainterView, YKPainterDoc

- MFC Document/View 구조로 프로젝트를 생성하면 자동생성되는 객체들.

- CMainFrame은 화면에 구성되는 각종 컨트롤들을 생성하고, 배치한다. 또한 CYKPainterView의 요청에 따라 컨트롤의 배치를 변경한다.

- CYKPainterView는 사용자에게 화면을 보여주고, 사용자로부터의 이벤트를 받아 적절한 클래스에 요청한다.

- YKPainterDoc은 그림 객체에 대한 정보를 가지고 있으며, CYKPainterView로부터 발생되는 이벤트를 처리하여 객체화 한다.

 

1.2 DrawObject

- 툴을 선택하여 화면에 그려진 정보에 대한 객체이다. 한번에 그린 그림 정보(포인트정보, 색깔정보, 그림 모드등)가 하나의 객체로 생성된다.

- draw(CDC) : 각 객체들이 자신이 그려지는 방법에 대해서 프로그램 되어 있다. CYKPainterView 에서 다시 그려져야 할 경우, YKPainterDoc으로부터 DrawObject의 리스트를 받아 각각의 DrawObject에 DC를 넘겨주며 그리도록 한다.

- int drawType() : 해당 객체의 그림 타입을 반환 한다.

- serialize(CArchive) : 그림을 저장할때 YKPainterDoc.Serialize() 로부터 호출되며, 해당객체에 대한 직렬화 방법이다.

- deserialize(CArchive) : 그림을 불러올때 YKPainterDoc.Serialize() 로부터 호출되며, 해당객체에 대한 역직렬화 방법이다.

 

1.3 PencilDraw, FillDraw, BeeLineDraw, EllipseDraw, RectangleDraw, PolygonDraw, TextDraw

- 각각 그리기 툴에 대응되는 그림 정보 객체이다.

 

1.4 ToolbarDialog

- 툴바에서 그리기 툴을 선택시 각 툴마다 가지는 도형모드(선두께, 폰트 등) 을 보여주고 입력을 받는 객체

 

1.5 ToolbarSetter

- ToolbarDialog에 보여질 도형모드 객체

- showToolbar(CDialogBar) : 해당 객체를 CDialogBar 위에 보여준다.

- hileToolbar() : 해당 객체를 숨겨준다.

 

1.6 LineToolbarSetter, FigureToolbarSetter, TextToolbarSetter

- 각각 도형모드에 대한 객체

- LineToolbarSetter : 펜툴이나 직선툴 선택시 보여지며, 선두께를 선택할 수 있는 컨트롤이 보여진다.

- FigureToolbarSetter : 원툴, 사각형툴, 다각형툴 선택시 보여지며, 선두께, 도형모드(채우기없음, 채우기, 선없음) 를 선택할 수 있는 컨트롤이 보여진다.

- TextToolbarSetter : 텍스트툴 선택시 보여지며, 폰트설정, 텍스트 배경 여부를 선택할 수 있는 컨트롤이 보여진다.


by fomuon | 2008/06/21 15:12 | 강의 | 트랙백 | 덧글(0)

천재 해커 요한슨의 블로그


노르웨이의 천재해커 Johansen's blog

http://nanocr.eu/

by fomuon | 2008/06/17 20:29 | 링크 | 트랙백 | 덧글(0)

◀ 이전 페이지          다음 페이지 ▶