Download presentation
1
Visual C 실전 예제 Drawing Tool
2
Drawing Tool – Draw Project
3
Drawing Tool – Draw Project
View Class의 그래픽 기능 선그리기, 자유곡선 그리기 : MoveTo, LineTo 사각형그리기 : Rectangle 원그리기 : Ellipse Document Class의 데이터처리 및 저장 CObList ( MFC 의 Linked List Class) Serialize 사용자 인터페이스 메뉴, 툴바 선, 채우기 색 지정 - 컬러 공통 다이얼로그 박스
4
Drawing Tool – Draw Project
Application Wizard 프로젝트 명 : Draw Type : SDI 그리기 구현
5
Drawing Tool – Draw Project
Member Variable 추가 View class CDrawView : public CView { public: COLORREF m_colorPen; // 펜 컬러 COLORREF m_colorPenX; // 반전된 펜 컬러 COLORREF m_colorBrush; // 브러시 컬러 CPoint m_ptOld; // 마우스가 클릭 된 위치 저장 CPoint m_ptTrace; // 마우스가 움직이는 점 추적 int m_nDrawType; // 그리기 도구 타입
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; }
7
Drawing Tool – Draw Project
사용자 인터페이스- 메뉴 자유곡선그리기 : ID_FREEDRAW 선그리기 : ID_LINE 사각형그리기 : ID_RECTANGLE 타원그리기 : ID_ELLIPSE ID의 연속성 확인 선색 : ID_PENCOLOR 채우기색 : ID_BRUSHCOLOR 지우기 : IDC_ERASER
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; }
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); }
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()
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, GetGValue(m_colorPen) ^ 255, GetBValue(m_colorPen) ^ 255 ) ); }
12
Drawing Tool – Draw Project
채우기 색 지정 void CDrawView::OnBrushColor() { CColorDialog dlg; if( dlg.DoModal() == IDOK ) { m_colorBrush = dlg.GetColor(); }
13
Drawing Tool – Draw Project
지우기 //전체 데이터 지우기 void CDrawView::OnEraser() { CDrawDoc* pDoc = GetDocument(); pDoc->DeleteContents(); //화면 다시 그리기 pDoc->UpdateAllViews(NULL); }
14
Drawing Tool – Draw Project
툴바
15
Drawing Tool – Draw Project
툴바 자료실의 Draw Project folder 내의 Draw.rc 선택
16
Drawing Tool – Draw Project
툴바
17
Drawing Tool – Draw Project
툴바 Ctrl + c (복사하기), Ctrl + v(붙여넣기)
18
Drawing Tool – Draw Project
툴바 Delete
19
Drawing Tool – Draw Project
툴바
20
Drawing Tool – Draw Project
툴바
21
Drawing Tool – Draw Project
마우스의 위치를 추적하며 그림 그리기 마우스 메시지 캡쳐 3-1의 Rop2 Project
22
Drawing Tool – Draw Project
void 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);
23
Drawing Tool – Draw Project
void CDrawView::OnMouseMove(UINT nFlags, CPoint point) { if( nFlags & MK_LBUTTON ) { //if LButton pressed CClientDC 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);
24
Drawing Tool – Draw Project
switch( m_nDrawType ) { //선 그리기 case ID_LINE : // 이전 그림 지우기 dc.MoveTo(m_ptOld.x,m_ptOld.y); dc.LineTo(m_ptTrace.x,m_ptTrace.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);
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;
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);
27
Visual C++ 6-1 실전 예제 - Drawing Tool 사용자 인터페이스 갱신 핸들러 그리기 메뉴, 툴바
선, 사각형, 타원, 자유곡선
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.