/////////////////////////////////////////////////////////////////////////////
// CMiniDrawApp message handlers// MiniDrawDoc.h : interface of the CMiniDrawDoc class
//
/////////////////////////////////////////////////////////////////////////////#if !defined(AFX_MINIDRAWDOC_H__4B5EE442_AC47_44CB_97E7_57198FE8B963__INCLUDED_)
#define AFX_MINIDRAWDOC_H__4B5EE442_AC47_44CB_97E7_57198FE8B963__INCLUDED_#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
class CLine:public CObject
{
protected:
int m_X1,m_Y1,m_X2,m_Y2;
public:
CLine(int X1,int Y1,int X2,int Y2)
{
m_X1=X1;
m_Y1=Y1;
m_X2=X2;
m_Y2=Y2;
} void Draw(CDC *PDC);
};class CMiniDrawDoc : public CDocument
{
protected:
// CTypedPtrArray<CObArray,CLine*>m_LineArray;
CTypedPtrArray<CObArray,CLine*>m_LineArray;
public:
void AddLine(int X1,int Y1,int X2,int Y2);
CLine *GetLine(int Index);
int GetNumLines();
protected: // create from serialization only
CMiniDrawDoc();
DECLARE_DYNCREATE(CMiniDrawDoc)// Attributes
public:// Operations
public:// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CMiniDrawDoc)
public:
virtual BOOL OnNewDocument();
virtual void Serialize(CArchive& ar);
virtual void DeleteContents();
//}}AFX_VIRTUAL// Implementation
public:
virtual ~CMiniDrawDoc();
#ifdef _DEBUG
virtual void AssertValid() const;
virtual void Dump(CDumpContext& dc) const;
#endifprotected:// Generated message map functions
protected:
//{{AFX_MSG(CMiniDrawDoc)
afx_msg void OnEditClearAll();
afx_msg void OnUpdateEditClearAll(CCmdUI* pCmdUI);
afx_msg void OnEditUndo();
afx_msg void OnUpdateEditUndo(CCmdUI* pCmdUI);
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};///////////////////////////////////////////////////////////////////////////////{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.#endif // !defined(AFX_MINIDRAWDOC_H__4B5EE442_AC47_44CB_97E7_57198FE8B963__INCLUDED_)
// MiniDrawDoc.cpp : implementation of the CMiniDrawDoc class
//#include "stdafx.h"
#include "MiniDraw.h"#include "MiniDrawDoc.h"#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif/////////////////////////////////////////////////////////////////////////////
// CMiniDrawDocIMPLEMENT_DYNCREATE(CMiniDrawDoc, CDocument)BEGIN_MESSAGE_MAP(CMiniDrawDoc, CDocument)
//{{AFX_MSG_MAP(CMiniDrawDoc)
ON_COMMAND(ID_EDIT_CLEAR_ALL, OnEditClearAll)
ON_UPDATE_COMMAND_UI(ID_EDIT_CLEAR_ALL, OnUpdateEditClearAll)
ON_COMMAND(ID_EDIT_UNDO, OnEditUndo)
ON_UPDATE_COMMAND_UI(ID_EDIT_UNDO, OnUpdateEditUndo)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()/////////////////////////////////////////////////////////////////////////////
// CMiniDrawDoc construction/destructionCMiniDrawDoc::CMiniDrawDoc()
{
// TODO: add one-time construction code here}CMiniDrawDoc::~CMiniDrawDoc()
{
}BOOL CMiniDrawDoc::OnNewDocument()
{
if (!CDocument::OnNewDocument())
return FALSE; // TODO: add reinitialization code here
// (SDI documents will reuse this document) return TRUE;
}/////////////////////////////////////////////////////////////////////////////
// CMiniDrawDoc serializationvoid CMiniDrawDoc::Serialize(CArchive& ar)
{
if (ar.IsStoring())
{
// TODO: add storing code here
}
else
{
// TODO: add loading code here
}
}/////////////////////////////////////////////////////////////////////////////
// CMiniDrawDoc diagnostics#ifdef _DEBUG
void CMiniDrawDoc::AssertValid() const
{
CDocument::AssertValid();
}void CMiniDrawDoc::Dump(CDumpContext& dc) const
{
CDocument::Dump(dc);
}
#endif //_DEBUG/////////////////////////////////////////////////////////////////////////////
// CMiniDrawDoc commands
void CLine::Draw (CDC *PDC)
{
PDC->MoveTo (m_X1,m_Y1);
PDC->LineTo (m_X2,m_Y2);
}void CMiniDrawDoc::AddLine (int X1,int Y1,int X2,int Y2)
{
CLine *PLine=new CLine(X1,Y1,X2,Y2);
m_LineArray.Add(PLine);
}CLine *CMiniDrawDoc::GetLine (int Index)
{
if(Index<0||Index>m_LineArray.GetUpperBound())
return 0;
return m_LineArray.GetAt(Index);
}int CMiniDrawDoc::GetNumLines ()
{
return m_LineArray.GetSize();
}void CMiniDrawDoc::DeleteContents()
{
// TODO: Add your specialized code here and/or call the base class
int Index=m_LineArray.GetSize();
while(Index--)
delete m_LineArray.GetAt(Index);
m_LineArray.RemoveAll(); CDocument::DeleteContents();
}void CMiniDrawDoc::OnEditClearAll()
{
// TODO: Add your command handler code here
DeleteContents();
UpdateAllViews(0);
}void CMiniDrawDoc::OnUpdateEditClearAll(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
pCmdUI->Enable (m_LineArray.GetSize());
}void CMiniDrawDoc::OnEditUndo()
{
// TODO: Add your command handler code here
int Index=m_LineArray.GetUpperBound();
if(Index>-1)
{
delete m_LineArray.GetAt(Index);
m_LineArray.RemoveAt(Index);
}
UpdateAllViews(0);
}void CMiniDrawDoc::OnUpdateEditUndo(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
pCmdUI->Enable (m_LineArray.GetSize());
}
// CMiniDrawApp message handlers// MiniDrawDoc.h : interface of the CMiniDrawDoc class
//
/////////////////////////////////////////////////////////////////////////////#if !defined(AFX_MINIDRAWDOC_H__4B5EE442_AC47_44CB_97E7_57198FE8B963__INCLUDED_)
#define AFX_MINIDRAWDOC_H__4B5EE442_AC47_44CB_97E7_57198FE8B963__INCLUDED_#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
class CLine:public CObject
{
protected:
int m_X1,m_Y1,m_X2,m_Y2;
public:
CLine(int X1,int Y1,int X2,int Y2)
{
m_X1=X1;
m_Y1=Y1;
m_X2=X2;
m_Y2=Y2;
} void Draw(CDC *PDC);
};class CMiniDrawDoc : public CDocument
{
protected:
// CTypedPtrArray<CObArray,CLine*>m_LineArray;
CTypedPtrArray<CObArray,CLine*>m_LineArray;
public:
void AddLine(int X1,int Y1,int X2,int Y2);
CLine *GetLine(int Index);
int GetNumLines();
protected: // create from serialization only
CMiniDrawDoc();
DECLARE_DYNCREATE(CMiniDrawDoc)// Attributes
public:// Operations
public:// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CMiniDrawDoc)
public:
virtual BOOL OnNewDocument();
virtual void Serialize(CArchive& ar);
virtual void DeleteContents();
//}}AFX_VIRTUAL// Implementation
public:
virtual ~CMiniDrawDoc();
#ifdef _DEBUG
virtual void AssertValid() const;
virtual void Dump(CDumpContext& dc) const;
#endifprotected:// Generated message map functions
protected:
//{{AFX_MSG(CMiniDrawDoc)
afx_msg void OnEditClearAll();
afx_msg void OnUpdateEditClearAll(CCmdUI* pCmdUI);
afx_msg void OnEditUndo();
afx_msg void OnUpdateEditUndo(CCmdUI* pCmdUI);
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};///////////////////////////////////////////////////////////////////////////////{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.#endif // !defined(AFX_MINIDRAWDOC_H__4B5EE442_AC47_44CB_97E7_57198FE8B963__INCLUDED_)
// MiniDrawDoc.cpp : implementation of the CMiniDrawDoc class
//#include "stdafx.h"
#include "MiniDraw.h"#include "MiniDrawDoc.h"#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif/////////////////////////////////////////////////////////////////////////////
// CMiniDrawDocIMPLEMENT_DYNCREATE(CMiniDrawDoc, CDocument)BEGIN_MESSAGE_MAP(CMiniDrawDoc, CDocument)
//{{AFX_MSG_MAP(CMiniDrawDoc)
ON_COMMAND(ID_EDIT_CLEAR_ALL, OnEditClearAll)
ON_UPDATE_COMMAND_UI(ID_EDIT_CLEAR_ALL, OnUpdateEditClearAll)
ON_COMMAND(ID_EDIT_UNDO, OnEditUndo)
ON_UPDATE_COMMAND_UI(ID_EDIT_UNDO, OnUpdateEditUndo)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()/////////////////////////////////////////////////////////////////////////////
// CMiniDrawDoc construction/destructionCMiniDrawDoc::CMiniDrawDoc()
{
// TODO: add one-time construction code here}CMiniDrawDoc::~CMiniDrawDoc()
{
}BOOL CMiniDrawDoc::OnNewDocument()
{
if (!CDocument::OnNewDocument())
return FALSE; // TODO: add reinitialization code here
// (SDI documents will reuse this document) return TRUE;
}/////////////////////////////////////////////////////////////////////////////
// CMiniDrawDoc serializationvoid CMiniDrawDoc::Serialize(CArchive& ar)
{
if (ar.IsStoring())
{
// TODO: add storing code here
}
else
{
// TODO: add loading code here
}
}/////////////////////////////////////////////////////////////////////////////
// CMiniDrawDoc diagnostics#ifdef _DEBUG
void CMiniDrawDoc::AssertValid() const
{
CDocument::AssertValid();
}void CMiniDrawDoc::Dump(CDumpContext& dc) const
{
CDocument::Dump(dc);
}
#endif //_DEBUG/////////////////////////////////////////////////////////////////////////////
// CMiniDrawDoc commands
void CLine::Draw (CDC *PDC)
{
PDC->MoveTo (m_X1,m_Y1);
PDC->LineTo (m_X2,m_Y2);
}void CMiniDrawDoc::AddLine (int X1,int Y1,int X2,int Y2)
{
CLine *PLine=new CLine(X1,Y1,X2,Y2);
m_LineArray.Add(PLine);
}CLine *CMiniDrawDoc::GetLine (int Index)
{
if(Index<0||Index>m_LineArray.GetUpperBound())
return 0;
return m_LineArray.GetAt(Index);
}int CMiniDrawDoc::GetNumLines ()
{
return m_LineArray.GetSize();
}void CMiniDrawDoc::DeleteContents()
{
// TODO: Add your specialized code here and/or call the base class
int Index=m_LineArray.GetSize();
while(Index--)
delete m_LineArray.GetAt(Index);
m_LineArray.RemoveAll(); CDocument::DeleteContents();
}void CMiniDrawDoc::OnEditClearAll()
{
// TODO: Add your command handler code here
DeleteContents();
UpdateAllViews(0);
}void CMiniDrawDoc::OnUpdateEditClearAll(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
pCmdUI->Enable (m_LineArray.GetSize());
}void CMiniDrawDoc::OnEditUndo()
{
// TODO: Add your command handler code here
int Index=m_LineArray.GetUpperBound();
if(Index>-1)
{
delete m_LineArray.GetAt(Index);
m_LineArray.RemoveAt(Index);
}
UpdateAllViews(0);
}void CMiniDrawDoc::OnUpdateEditUndo(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
pCmdUI->Enable (m_LineArray.GetSize());
}
//
/////////////////////////////////////////////////////////////////////////////#if !defined(AFX_MAINFRM_H__FC3DF557_23AC_494E_94B6_F7A23B4C2225__INCLUDED_)
#define AFX_MAINFRM_H__FC3DF557_23AC_494E_94B6_F7A23B4C2225__INCLUDED_#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000class CMainFrame : public CFrameWnd
{
protected: // create from serialization only
CMainFrame();
DECLARE_DYNCREATE(CMainFrame)// Attributes
public:// Operations
public:// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CMainFrame)
virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
//}}AFX_VIRTUAL// Implementation
public:
virtual ~CMainFrame();
#ifdef _DEBUG
virtual void AssertValid() const;
virtual void Dump(CDumpContext& dc) const;
#endif// Generated message map functions
protected:
//{{AFX_MSG(CMainFrame)
// NOTE - the ClassWizard will add and remove member functions here.
// DO NOT EDIT what you see in these blocks of generated code!
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};///////////////////////////////////////////////////////////////////////////////{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.#endif // !defined(AFX_MAINFRM_H__FC3DF557_23AC_494E_94B6_F7A23B4C2225__INCLUDED_)
// MainFrm.cpp : implementation of the CMainFrame class
//#include "stdafx.h"
#include "MiniDraw.h"#include "MainFrm.h"#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
// CMainFrameIMPLEMENT_DYNCREATE(CMainFrame, CFrameWnd)BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
//{{AFX_MSG_MAP(CMainFrame)
// NOTE - the ClassWizard will add and remove mapping macros here.
// DO NOT EDIT what you see in these blocks of generated code !
//}}AFX_MSG_MAP
END_MESSAGE_MAP()/////////////////////////////////////////////////////////////////////////////
// CMainFrame construction/destructionCMainFrame::CMainFrame()
{
// TODO: add member initialization code here
}CMainFrame::~CMainFrame()
{
}BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
if( !CFrameWnd::PreCreateWindow(cs) )
return FALSE;
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs return TRUE;
}/////////////////////////////////////////////////////////////////////////////
// CMainFrame diagnostics#ifdef _DEBUG
void CMainFrame::AssertValid() const
{
CFrameWnd::AssertValid();
}void CMainFrame::Dump(CDumpContext& dc) const
{
CFrameWnd::Dump(dc);
}#endif //_DEBUG/////////////////////////////////////////////////////////////////////////////
// CMainFrame message handlers
// MiniDrawView.h : interface of the CMiniDrawView class
//
/////////////////////////////////////////////////////////////////////////////#if !defined(AFX_MINIDRAWVIEW_H__797A22A0_D71E_41D9_A560_836A3C63CD9C__INCLUDED_)
#define AFX_MINIDRAWVIEW_H__797A22A0_D71E_41D9_A560_836A3C63CD9C__INCLUDED_#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
class CMiniDrawView : public CView
{
protected:
CString m_ClassName;
int m_Dragging;
HCURSOR m_HCross;
CPoint m_PointOld;
CPoint m_PointOrigin;
protected: // create from serialization only
CMiniDrawView();
DECLARE_DYNCREATE(CMiniDrawView)// Attributes
public:
CMiniDrawDoc* GetDocument();// Operations
public:// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CMiniDrawView)
public:
virtual void OnDraw(CDC* pDC); // overridden to draw this view
virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
protected:
//}}AFX_VIRTUAL// Implementation
public:
virtual ~CMiniDrawView();
#ifdef _DEBUG
virtual void AssertValid() const;
virtual void Dump(CDumpContext& dc) const;
#endifprotected:// Generated message map functions
protected:
//{{AFX_MSG(CMiniDrawView)
afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
afx_msg void OnMouseMove(UINT nFlags, CPoint point);
afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};#ifndef _DEBUG // debug version in MiniDrawView.cpp
inline CMiniDrawDoc* CMiniDrawView::GetDocument()
{ return (CMiniDrawDoc*)m_pDocument; }
#endif///////////////////////////////////////////////////////////////////////////////{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.#endif // !defined(AFX_MINIDRAWVIEW_H__797A22A0_D71E_41D9_A560_836A3C63CD9C__INCLUDED_)