?? caddoc.cpp
字號:
// cadDoc.cpp : implementation of the CCadDoc class
//
#include <afxcoll.h>
#include <afxtempl.h>
#include "stdafx.h"
#include "cad.h"
#include "Line.h"
#include "cadDoc.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CCadDoc
IMPLEMENT_DYNCREATE(CCadDoc, CDocument)
BEGIN_MESSAGE_MAP(CCadDoc, CDocument)
//{{AFX_MSG_MAP(CCadDoc)
// 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()
/////////////////////////////////////////////////////////////////////////////
// CCadDoc construction/destruction
CCadDoc::CCadDoc()
{
// TODO: add one-time construction code here
}
CCadDoc::~CCadDoc()
{
}
BOOL CCadDoc::OnNewDocument()
{
if (!CDocument::OnNewDocument())
return FALSE;
// TODO: add reinitialization code here
// (SDI documents will reuse this document)
return TRUE;
}
/////////////////////////////////////////////////////////////////////////////
// CCadDoc serialization
void CCadDoc::Serialize(CArchive& ar)
{
if (ar.IsStoring())
{ int indexline=0;
int indexcircle=0;
int indexrectangle=0;
ar<<m_whichgraph;
if(m_linearray.GetSize())
{
if(m_circlearray.GetSize())
{
m_linearray.GetAt(m_linearray.GetUpperBound())->SetNext(2);
}
else if(m_rectanglearray.GetSize())
{
m_linearray.GetAt(m_linearray.GetUpperBound())->SetNext(3);
}
else
m_linearray.GetAt(m_linearray.GetUpperBound())->SetNext(4);
}
if(m_circlearray.GetSize())
{
if(m_rectanglearray.GetSize())
{
m_circlearray.GetAt(m_circlearray.GetUpperBound())->SetNext(3);
}
else
m_circlearray.GetAt(m_circlearray.GetUpperBound())->SetNext(4);
}
if(m_rectanglearray.GetSize())
m_rectanglearray.GetAt(m_rectanglearray.GetUpperBound())->SetNext(4);
if(m_linearray.GetSize())
while(indexline<=m_linearray.GetUpperBound())
{
m_linearray.GetAt(indexline)->Serialize(ar);
indexline++;
}
if(m_circlearray.GetSize())
while(indexcircle<=m_circlearray.GetUpperBound())
{
m_circlearray.GetAt(indexcircle)->Serialize(ar);
indexcircle++;
}
if(m_rectanglearray.GetSize())
while(indexrectangle<=m_rectanglearray.GetUpperBound())
{
m_rectanglearray.GetAt(indexrectangle)->Serialize(ar);
indexrectangle++;
}
// TODO: add storing code here
}
else
{ CLine * pline;
CCircle * pcircle;
CRectangle * prectangle;
ar>>m_whichgraph;
if(m_whichgraph==1)
{
pline=new CLine;
pline->Serialize(ar);
m_linearray.Add(pline);
while(pline->GetNext()==1)
{
pline=new(CLine);
pline->Serialize(ar);
m_linearray.Add(pline);
}
if(pline->GetNext()==2)
{
pcircle=new CCircle;
pcircle->Serialize(ar);
m_circlearray.Add(pcircle);
while(pcircle->GetNext()==2)
{
pcircle=new CCircle;
pcircle->Serialize(ar);
m_circlearray.Add(pcircle);
}
if(pcircle->GetNext()==3)
{
do
{
prectangle=new CRectangle;
prectangle->Serialize(ar);
m_rectanglearray.Add(prectangle);
}
while(prectangle->GetNext()==3);
}
}
else if(pline->GetNext()==3)
{
do
{
prectangle=new CRectangle;
prectangle->Serialize(ar);
m_rectanglearray.Add(prectangle);
}
while(prectangle->GetNext()==3);
}
}
else if(m_whichgraph==2)
{
pcircle=new CCircle;
pcircle->Serialize(ar);
m_circlearray.Add(pcircle);
while(pcircle->GetNext()==2)
{
pcircle=new CCircle;
pcircle->Serialize(ar);
m_circlearray.Add(pcircle);
}
if(pcircle->GetNext()==3)
{
do
{
prectangle=new CRectangle;
prectangle->Serialize(ar);
m_rectanglearray.Add(prectangle);
}
while(prectangle->GetNext()==3);
}
}
else if(m_whichgraph==3)
{
do
{
prectangle=new CRectangle;
prectangle->Serialize(ar);
m_rectanglearray.Add(prectangle);
}
while(prectangle->GetNext()==3);
}
if(m_linearray.GetSize())
m_linearray.GetAt(m_linearray.GetUpperBound())->SetNext(1);
if(m_circlearray.GetSize())
m_circlearray.GetAt(m_circlearray.GetUpperBound())->SetNext(2);
if(m_rectanglearray.GetSize())
m_rectanglearray.GetAt(m_rectanglearray.GetUpperBound())->SetNext(3);
// TODO: add loading code here
}
}
/////////////////////////////////////////////////////////////////////////////
// CCadDoc diagnostics
#ifdef _DEBUG
void CCadDoc::AssertValid() const
{
CDocument::AssertValid();
}
void CCadDoc::Dump(CDumpContext& dc) const
{
CDocument::Dump(dc);
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CCadDoc commands
CLine * CCadDoc::GetLine(int nIndex)
{ if(nIndex<0||nIndex>m_linearray.GetUpperBound())
return NULL;
else
return m_linearray.GetAt(nIndex);
}
void CCadDoc::AddLine(CPoint pt1, CPoint pt2)
{
CLine * pline=new CLine(pt1,pt2);
m_linearray.Add(pline);
}
void CCadDoc::DeleteContents()
{
// TODO: Add your specialized code here and/or call the base class
CDocument::DeleteContents();
int indexline=m_linearray.GetUpperBound();
int indexcircle=m_circlearray.GetUpperBound();
int indexrectangle=m_rectanglearray.GetUpperBound();
CLine * pline;
CCircle * pcircle;
CRectangle * prectangle;
while(indexline>=0)
{
pline=m_linearray.GetAt(indexline);
delete(pline);
m_linearray.RemoveAt(indexline);
indexline--;
}
while(indexcircle>=0)
{
pcircle=m_circlearray.GetAt(indexcircle);
delete(pcircle);
m_circlearray.RemoveAt(indexcircle);
indexcircle--;
}
while(indexrectangle>=0)
{
prectangle=m_rectanglearray.GetAt(indexrectangle);
delete(prectangle);
m_rectanglearray.RemoveAt(indexrectangle);
indexrectangle--;
}
}
void CCadDoc::AddRectangle(CPoint pt1, CPoint pt2)
{
CRectangle *prectangle;
prectangle=new CRectangle(pt1,pt2);
m_rectanglearray.Add(prectangle);
}
void CCadDoc::AddCircle(CPoint pt1, CPoint pt2)
{
CCircle * pcircle;
pcircle=new CCircle(pt1,pt2);
m_circlearray.Add(pcircle);
}
void CCadDoc::SetGraphKind(int i)
{
m_whichgraph=i;
}
int CCadDoc::GetGraphKind()
{
return m_whichgraph;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -