/////////////////////////////////////////////////////////////////////////////
// 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());
}

解决方案 »

  1.   

    // MainFrm.h : interface of the CMainFrame class
    //
    /////////////////////////////////////////////////////////////////////////////#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
      

  2.   

    /////////////////////////////////////////////////////////////////////////////
    // 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_)