visual c++ 6-1 실전 예제 drawing tool

27
1 Visual C++ 6-1 실실 실실 - Drawing Tool

Upload: evelyn-weaver

Post on 18-Jan-2018

270 views

Category:

Documents


0 download

DESCRIPTION

Drawing Tool – Draw Project

TRANSCRIPT

Page 1: Visual C++ 6-1 실전 예제 Drawing Tool

1

Visual C++ 6-1실전 예제- Drawing Tool

Page 2: Visual C++ 6-1 실전 예제 Drawing Tool

2

Drawing Tool – Draw Project

Page 3: Visual C++ 6-1 실전 예제 Drawing Tool

3

Drawing Tool – Draw Project View Class 의 그래픽 기능

• 선그리기 , 자유곡선 그리기 : MoveTo, LineTo• 사각형그리기 : Rectangle• 원그리기 : Ellipse

Document Class 의 데이터처리 및 저장 • CObList ( MFC 의 Linked List Class)• Serialize

사용자 인터페이스• 메뉴 , 툴바• 선 , 채우기 색 지정 - 컬러 공통 다이얼로그 박스

Page 4: Visual C++ 6-1 실전 예제 Drawing Tool

4

Drawing Tool – Draw Project Application Wizard

• 프로젝트 명 : Draw• Type : SDI

그리기 구현

Page 5: Visual C++ 6-1 실전 예제 Drawing Tool

5

Drawing Tool – Draw Project Member Variable 추가

• Viewclass CDrawView : public CView

{ public:

COLORREF m_colorPen; // 펜 컬러COLORREF m_colorPenX; // 반전된 펜 컬러COLORREF m_colorBrush; // 브러시 컬러CPoint m_ptOld; // 마우스가 클릭 된 위치 저장CPoint m_ptTrace; // 마우스가 움직이는 점 추적 int m_nDrawType; // 그리기 도구 타입

Page 6: Visual C++ 6-1 실전 예제 Drawing Tool

6

Drawing Tool – Draw Project Member Variable 초기화 - View

CDrawView::CDrawView(){

m_colorPen = RGB(0,0,0);m_colorPenX = RGB(255,255,255);m_colorBrush = RGB(255,255,255);

// 초기 그리기 모드는 자유곡선으로m_nDrawType = ID_FREEDRAW;

}

Page 7: Visual C++ 6-1 실전 예제 Drawing Tool

7

Drawing Tool – Draw Project 사용자 인터페이스 - 메뉴

• 자유곡선그리기 : ID_FREEDRAW• 선그리기 : ID_LINE• 사각형그리기 : ID_RECTANGLE• 타원그리기 : ID_ELLIPSE ID 의 연속성 확인

• 선색 : ID_PENCOLOR• 채우기색 : ID_BRUSHCOLOR• 지우기 : IDC_ERASER

Page 8: Visual C++ 6-1 실전 예제 Drawing Tool

8

Drawing Tool – Draw Project Command Message Handler – View Class

BEGIN_MESSAGE_MAP(CDrawView, CView)ON_COMMAND_RANGE(ID_LINE, ID_FREEDRAW,

OnChangeTool)ON_UPDATE_COMMAND_UI_RANGE(ID_LINE, ID_FREEDRAW, OnUpdateChangeTool)

END_MESSAGE_MAP()

// 그리기 모드 변경 /////////////////////////////////void CDrawView::OnChangeTool(UINT nID) {

m_nDrawType = nID;}

Page 9: Visual C++ 6-1 실전 예제 Drawing Tool

9

Drawing Tool – Draw Project 사용자 인터페이스 갱신 핸들러 - 메뉴

BEGIN_MESSAGE_MAP(CDrawView, CView)ON_COMMAND_RANGE(ID_LINE, ID_FREEDRAW,

OnChangeTool)ON_UPDATE_COMMAND_UI_RANGE(ID_LINE,

ID_FREEDRAW, OnUpdateChangeTool)END_MESSAGE_MAP()

// 그리기 모드에 대한 사용자 인터페이스 처리 ///////////void CDrawView::OnUpdateChangeTool(CCmdUI* pCmdUI) {

pCmdUI->SetCheck(m_nDrawType == (int)pCmdUI->m_nID);

}

Page 10: Visual C++ 6-1 실전 예제 Drawing Tool

10

Drawing Tool – Draw Project 선색 지정 , 채우기 색 지정 , 지우기 - 메뉴

BEGIN_MESSAGE_MAP(CDrawView, CView)//{{AFX_MSG_MAP(CDrawView)ON_COMMAND(ID_PENCOLOR, OnPenColor)ON_COMMAND(ID_BRUSHCOLOR, OnBrushColor)ON_COMMAND(IDC_ERASER, OnEraser)//}}AFX_MSG_MAP

END_MESSAGE_MAP()

Page 11: Visual C++ 6-1 실전 예제 Drawing Tool

11

Drawing Tool – Draw Project 선색 지정

void CDrawView::OnPenColor() {

CColorDialog dlg;// 컬러 다이얼로그 박스를 이용해서 컬러를 설정 . XOR 펜으로 그릴 것이므로 색을 반대로 설정if( dlg.DoModal() == IDOK ) {

m_colorPen= dlg.GetColor();m_colorPenX = ( RGB ( GetRValue(m_colorPen) ^ 255, Ge

tGValue(m_colorPen) ^ 255, GetBValue(m_colorPen) ^ 255 ) ); }

}

Page 12: Visual C++ 6-1 실전 예제 Drawing Tool

12

Drawing Tool – Draw Project 채우기 색 지정

void CDrawView::OnBrushColor() {

CColorDialog dlg;

if( dlg.DoModal() == IDOK ) {m_colorBrush = dlg.GetColor();

}}

Page 13: Visual C++ 6-1 실전 예제 Drawing Tool

13

Drawing Tool – Draw Project 지우기// 전체 데이터 지우기void CDrawView::OnEraser() {

CDrawDoc* pDoc = GetDocument();

// 전체 데이터 지우기pDoc->DeleteContents();

// 화면 다시 그리기pDoc->UpdateAllViews(NULL);

}

Page 14: Visual C++ 6-1 실전 예제 Drawing Tool

14

Drawing Tool – Draw Project 툴바

Page 15: Visual C++ 6-1 실전 예제 Drawing Tool

15

Drawing Tool – Draw Project 툴바

자료실의 Draw Project folder 내의 Draw.rc 선택

Page 16: Visual C++ 6-1 실전 예제 Drawing Tool

16

Drawing Tool – Draw Project 툴바

Page 17: Visual C++ 6-1 실전 예제 Drawing Tool

17

Drawing Tool – Draw Project 툴바 Ctrl + c ( 복사하기 ), Ctrl + v( 붙여넣기 )

Page 18: Visual C++ 6-1 실전 예제 Drawing Tool

18

Drawing Tool – Draw Project 툴바 Delete

Page 19: Visual C++ 6-1 실전 예제 Drawing Tool

19

Drawing Tool – Draw Project 툴바

Page 20: Visual C++ 6-1 실전 예제 Drawing Tool

20

Drawing Tool – Draw Project 툴바

Page 21: Visual C++ 6-1 실전 예제 Drawing Tool

21

Drawing Tool – Draw Project 마우스의 위치를 추적하며 그림 그리기

• 마우스 메시지 캡쳐

3-1 의 Rop2 Project

Page 22: Visual C++ 6-1 실전 예제 Drawing Tool

22

Drawing Tool – Draw Projectvoid CDrawView::OnLButtonDown(UINT nFlags, CPoint point) {

// 그림을 그릴 점들을 초기화m_ptOld = m_ptTrace = point;

// 마우스가 눌린 상태에서 윈도우를 빠져나가는 경우를 대비SetCapture();CView::OnLButtonDown(nFlags, point);

}

void CDrawView::OnLButtonUp(UINT nFlags, CPoint point) {

//OnLButtonDown 에서 캡쳐한 마우스를 놓아 줌ReleaseCapture();……CView::OnLButtonUp(nFlags, point);

}

Page 23: Visual C++ 6-1 실전 예제 Drawing Tool

23

Drawing Tool – Draw Projectvoid CDrawView::OnMouseMove(UINT nFlags, CPoint point) {

if( nFlags & MK_LBUTTON ) { //if LButton pressedCClientDC dc(this);

// 펜과 브러시 속성을 변경CPen pen,*pOldPen;if(m_nDrawType == ID_FREEDRAW) {

pen.CreatePen(PS_SOLID,1,m_colorPen);}else{

pen.CreatePen(PS_SOLID,1,m_colorPenX);dc.SelectObject(GetStockObject(NULL_BRUSH));dc.SetROP2(R2_XORPEN);

}pOldPen = (CPen *)dc.SelectObject(&pen);

Page 24: Visual C++ 6-1 실전 예제 Drawing Tool

24

Drawing Tool – Draw Projectswitch( m_nDrawType ) {// 선 그리기case ID_LINE : // 이전 그림 지우기dc.MoveTo(m_ptOld.x,m_ptOld.y);dc.LineTo(m_ptTrace.x,m_ptTrace.y);// 새 그림 그리기dc.MoveTo(m_ptOld.x,m_ptOld.y);dc.LineTo(point.x,point.y);break;

// 사각형 그리기case ID_RECTANGLE : // 이전 그림 지우기 dc.Rectangle(m_ptOld.x,m_ptOld.y,m_ptTrace.x,

m_ptTrace.y);// 새 그림 그리기dc.Rectangle(m_ptOld.x,m_ptOld.y,point.x,point.y);break;

Page 25: Visual C++ 6-1 실전 예제 Drawing Tool

25

Drawing Tool – Draw Project// 타원 그리기

case ID_ELLIPSE : // 이전 그림 지우기dc.Ellipse(m_ptOld.x,m_ptOld.y,m_ptTrace.x,

m_ptTrace.y);// 새 그림 그리기dc.Ellipse(m_ptOld.x,m_ptOld.y,point.x,point.y);

break;

Page 26: Visual C++ 6-1 실전 예제 Drawing Tool

26

Drawing Tool – Draw Project// 자유곡선 그리기

case ID_FREEDRAW :dc.MoveTo(m_ptOld.x,m_ptOld.y);dc.LineTo(point.x,point.y);m_ptOld = point;break;

}// 움직이는 점을 추적m_ptTrace = point;

dc.SelectObject(pOldPen);}

CView::OnMouseMove(nFlags, point);}

Page 27: Visual C++ 6-1 실전 예제 Drawing Tool

27

Visual C++ 6-1 실전 예제 - Drawing Tool

• 사용자 인터페이스 갱신 핸들러 메뉴 , 툴바

• 그리기 선 , 사각형 , 타원 , 자유곡선