home *** CD-ROM | disk | FTP | other *** search
/ Mastering Microsoft Visual C++ 4 (2nd Edition) / VisualC4.ISO / minidrw4 / miniddoc.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  1995-11-30  |  3.9 KB  |  181 lines

  1. // MiniDDoc.cpp : implementation of the CMiniDrawDoc class
  2. //
  3.  
  4. #include "stdafx.h"
  5. #include "MiniDraw.h"
  6.  
  7. #include "MiniDDoc.h"
  8.  
  9. #ifdef _DEBUG
  10. #define new DEBUG_NEW
  11. #undef THIS_FILE
  12. static char THIS_FILE[] = __FILE__;
  13. #endif
  14.  
  15. /////////////////////////////////////////////////////////////////////////////
  16. // CMiniDrawDoc
  17.  
  18. IMPLEMENT_DYNCREATE(CMiniDrawDoc, CDocument)
  19.  
  20. BEGIN_MESSAGE_MAP(CMiniDrawDoc, CDocument)
  21.    //{{AFX_MSG_MAP(CMiniDrawDoc)
  22.    ON_COMMAND(ID_EDIT_CLEAR_ALL, OnEditClearAll)
  23.    ON_UPDATE_COMMAND_UI(ID_EDIT_CLEAR_ALL, OnUpdateEditClearAll)
  24.    ON_COMMAND(ID_EDIT_UNDO, OnEditUndo)
  25.    ON_UPDATE_COMMAND_UI(ID_EDIT_UNDO, OnUpdateEditUndo)
  26.    //}}AFX_MSG_MAP
  27. END_MESSAGE_MAP()
  28.  
  29. /////////////////////////////////////////////////////////////////////////////
  30. // CMiniDrawDoc construction/destruction
  31.  
  32. CMiniDrawDoc::CMiniDrawDoc()
  33. {
  34.    // TODO: add one-time construction code here
  35.  
  36. }
  37.  
  38. CMiniDrawDoc::~CMiniDrawDoc()
  39. {
  40. }
  41.  
  42. BOOL CMiniDrawDoc::OnNewDocument()
  43. {
  44.    if (!CDocument::OnNewDocument())
  45.       return FALSE;
  46.  
  47.    // TODO: add reinitialization code here
  48.    // (SDI documents will reuse this document)
  49.  
  50.    return TRUE;
  51. }
  52.  
  53. /////////////////////////////////////////////////////////////////////////////
  54. // CMiniDrawDoc serialization
  55.  
  56. void CMiniDrawDoc::Serialize(CArchive& ar)
  57. {
  58.    if (ar.IsStoring())
  59.    {
  60.       // TODO: add storing code here
  61.       m_LineArray.Serialize (ar);
  62.    }
  63.    else
  64.    {
  65.       // TODO: add loading code here
  66.       m_LineArray.Serialize (ar);
  67.    }
  68. }
  69.  
  70. /////////////////////////////////////////////////////////////////////////////
  71. // CMiniDrawDoc diagnostics
  72.  
  73. #ifdef _DEBUG
  74. void CMiniDrawDoc::AssertValid() const
  75. {
  76.    CDocument::AssertValid();
  77. }
  78.  
  79. void CMiniDrawDoc::Dump(CDumpContext& dc) const
  80. {
  81.    CDocument::Dump(dc);
  82. }
  83. #endif //_DEBUG
  84.  
  85. /////////////////////////////////////////////////////////////////////////////
  86. // CMiniDrawDoc commands
  87.  
  88. IMPLEMENT_SERIAL (CLine, CObject, 1)
  89.  
  90. void CLine::Draw (CDC *PDC)
  91.    {
  92.    PDC->MoveTo (m_X1, m_Y1);
  93.    PDC->LineTo (m_X2, m_Y2);
  94.    }
  95.  
  96. void CLine::Serialize (CArchive& ar)
  97.    {
  98.    if (ar.IsStoring())
  99.       ar << m_X1 << m_Y1 << m_X2 << m_Y2;
  100.    else
  101.       ar >> m_X1 >> m_Y1 >> m_X2 >> m_Y2;
  102.    }
  103.  
  104. CLine *CMiniDrawDoc::AddLine (int X1, int Y1, int X2, int Y2)
  105.    {            
  106.    CLine *PLine = new CLine (X1, Y1, X2, Y2);
  107.    m_LineArray.Add (PLine);
  108.    SetModifiedFlag ();
  109.    return PLine;
  110.    }
  111.  
  112. CLine *CMiniDrawDoc::GetLine (int Index)
  113.    {
  114.    if (Index < 0 || Index > m_LineArray.GetUpperBound ())
  115.       return 0;
  116.    return m_LineArray.GetAt (Index);
  117.    }    
  118.    
  119. int CMiniDrawDoc::GetNumLines ()
  120.    {
  121.    return m_LineArray.GetSize ();
  122.    }
  123.  
  124. void CMiniDrawDoc::DeleteContents() 
  125. {
  126.    // TODO: Add your specialized code here and/or call the base class
  127.    
  128.    int Index = m_LineArray.GetSize ();
  129.    while (Index--)
  130.       delete m_LineArray.GetAt (Index);      
  131.    m_LineArray.RemoveAll ();      
  132.  
  133.    CDocument::DeleteContents();
  134. }
  135.  
  136. void CMiniDrawDoc::OnEditClearAll() 
  137. {
  138.    // TODO: Add your command handler code here
  139.  
  140.    DeleteContents ();
  141.    UpdateAllViews (0);
  142.    SetModifiedFlag ();
  143. }
  144.  
  145. void CMiniDrawDoc::OnUpdateEditClearAll(CCmdUI* pCmdUI) 
  146. {
  147.    // TODO: Add your command update UI handler code here
  148.  
  149.    pCmdUI->Enable (m_LineArray.GetSize ());  
  150. }
  151.  
  152. void CMiniDrawDoc::OnEditUndo() 
  153. {
  154.    // TODO: Add your command handler code here
  155.  
  156.    int Index = m_LineArray.GetUpperBound ();
  157.    if (Index > -1)
  158.       {
  159.       delete m_LineArray.GetAt (Index);
  160.       m_LineArray.RemoveAt (Index);
  161.       }
  162.    UpdateAllViews (0);
  163.    SetModifiedFlag ();   
  164. }
  165.  
  166. void CMiniDrawDoc::OnUpdateEditUndo(CCmdUI* pCmdUI) 
  167. {
  168.    // TODO: Add your command update UI handler code here
  169.    
  170.    pCmdUI->Enable (m_LineArray.GetSize ());
  171. }
  172.  
  173. CRect CLine::GetDimRect ()
  174.    {
  175.    return CRect 
  176.      (min (m_X1, m_X2),
  177.       min (m_Y1, m_Y2), 
  178.       max (m_X1, m_X2) + 1,
  179.       max (m_Y1, m_Y2) + 1);
  180.    }
  181.