visual c++ 6-1 실전 예제 drawing tool
DESCRIPTION
Drawing Tool – Draw ProjectTRANSCRIPT
1
Visual C++ 6-1실전 예제- 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 추가
• Viewclass 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, Ge
tGValue(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 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);
}
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);
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;
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
• 사용자 인터페이스 갱신 핸들러 메뉴 , 툴바
• 그리기 선 , 사각형 , 타원 , 자유곡선