www.pudn.com > subject_1_113294.rar > PaintDoc.cpp, change:2002-05-23,size:5106b
// PaintDoc.cpp : implementation of the CPaintDoc class
//
#include "stdafx.h"
#include "Paint.h"
#include "PaintDoc.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CPaintDoc
IMPLEMENT_DYNCREATE(CPaintDoc, CDocument)
BEGIN_MESSAGE_MAP(CPaintDoc, CDocument)
//{{AFX_MSG_MAP(CPaintDoc)
// 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()
/////////////////////////////////////////////////////////////////////////////
// CPaintDoc construction/destruction
CPaintDoc::CPaintDoc()
{
// TODO: add one-time construction code here
m_Element=new CPtrList();
m_TypeList=new int[2000];
for(int i=0;i<2000;i++)
m_TypeList[i]=0;
Pointer=0;
}
CPaintDoc::~CPaintDoc()
{
}
BOOL CPaintDoc::OnNewDocument()
{
if (!CDocument::OnNewDocument())
return FALSE;
// TODO: add reinitialization code here
// (SDI documents will reuse this document)
return TRUE;
}
/////////////////////////////////////////////////////////////////////////////
// CPaintDoc serialization
void CPaintDoc::Serialize(CArchive& ar)
{
CLine *Line;
CRectangle *Rect;
CCircle *Circle;
CEllisp *Ellispe;
CArc *Arc;
CPolyline *Pline;
CPolygon *Pgon;
CText *Text;
POSITION Head=m_Element->GetHeadPosition();
POSITION Tail=m_Element->GetTailPosition();
POSITION Pos;
int i=0;
int index=0;
bool BreakFlag=false;
if (ar.IsStoring())
{
// TODO: add storing code here
ar<<Pointer;
for(int i=0;i<Pointer;i++)
ar<<m_TypeList[i];
for(Pos=Head;Pos=Tail;)
{
if(BreakFlag)
break;
switch(m_TypeList[index])
{
case P_LINE:
if(Pos==Tail)
{
Line=(CLine *)m_Element->GetAt(Pos);
BreakFlag=true;
}
else
Line=(CLine *)m_Element->GetNext(Pos);
Line->Serialize(ar);
break;
case P_RECTANGLE:
if(Pos==Tail)
{
Rect=(CRectangle *)m_Element->GetAt(Pos);
BreakFlag=true;
}
else
Rect=(CRectangle *)m_Element->GetNext(Pos);
Rect->Serialize(ar);
break;
case P_CIRCLE:
if(Pos==Tail)
{
Circle=(CCircle *)m_Element->GetAt(Pos);
BreakFlag=true;
}
else
Circle=(CCircle *)m_Element->GetNext(Pos);
Circle->Serialize(ar);
break;
case P_ELLISPE:
if(Pos==Tail)
{
Ellispe=(CEllisp *)m_Element->GetAt(Pos);
BreakFlag=true;
}
else
Rect=(CRectangle *)m_Element->GetNext(Pos);
Rect->Serialize(ar);
break;
case P_ARC:
if(Pos==Tail)
{
Arc=(CArc *)m_Element->GetAt(Pos);
BreakFlag=true;
}
else
Arc=(CArc *)m_Element->GetNext(Pos);
Arc->Serialize(ar);
break;
case P_POLYLINE:
if(Pos==Tail)
{
Pline=(CPolyline *)m_Element->GetAt(Pos);
BreakFlag=true;
}
else
Pline=(CPolyline *)m_Element->GetNext(Pos);
Pline->Serialize(ar);
break;
case P_POLYGON:
if(Pos==Tail)
{
Pgon=(CPolygon *)m_Element->GetAt(Pos);
BreakFlag=true;
}
else
Pgon=(CPolygon *)m_Element->GetNext(Pos);
Pgon->Serialize(ar);
break;
case P_TEXT:
if(Pos==Tail)
{
Text=(CText *)m_Element->GetAt(Pos);
BreakFlag=true;
}
else
Text=(CText *)m_Element->GetNext(Pos);
Text->Serialize(ar);
break;
}
index++;
}
}
else
{
// TODO: add loading code here
ar>>Pointer;
for(int i=0;i<Pointer;i++)
ar>>m_TypeList[i];
for(i=0;i<Pointer;i++)
{
switch(m_TypeList[i])
{
case P_LINE:
Line=new CLine();
Line->Serialize(ar);
m_Element->AddTail(Line);
break;
case P_RECTANGLE:
Rect=new CRectangle();
Rect->Serialize(ar);
m_Element->AddTail(Rect);
break;
case P_CIRCLE:
Circle=new CCircle();
Circle->Serialize(ar);
m_Element->AddTail(Circle);
break;
case P_ELLISPE:
Ellispe=new CEllisp();
Ellispe->Serialize(ar);
m_Element->AddTail(Ellispe);
break;
case P_ARC:
Arc=new CArc();
Arc->Serialize(ar);
m_Element->AddTail(Arc);
break;
case P_POLYLINE:
Pline=new CPolyline();
Pline->Serialize(ar);
m_Element->AddTail(Pline);
break;
case P_POLYGON:
Pgon=new CPolygon();
Pgon->Serialize(ar);
m_Element->AddTail(Pgon);
break;
case P_TEXT:
Text=new CText();
Text->Serialize(ar);
m_Element->AddTail(Text);
}
}
}
}
/////////////////////////////////////////////////////////////////////////////
// CPaintDoc diagnostics
#ifdef _DEBUG
void CPaintDoc::AssertValid() const
{
CDocument::AssertValid();
}
void CPaintDoc::Dump(CDumpContext& dc) const
{
CDocument::Dump(dc);
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CPaintDoc commands