📄 drawingdoc.cpp
字号:
// DrawingDoc.cpp : implementation of the CDrawingDoc class
//
#include "stdafx.h"
#include "Drawing.h"
#include "MainFrm.h"
#include "DrawingDoc.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CDrawingDoc
long CDrawingDoc::m_slSum = 0;
IMPLEMENT_DYNCREATE(CDrawingDoc, CDocument)
BEGIN_MESSAGE_MAP(CDrawingDoc, CDocument)
//{{AFX_MSG_MAP(CDrawingDoc)
ON_COMMAND(ID_FILE_NEW, OnFileNew)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CDrawingDoc construction/destruction
CDrawingDoc::CDrawingDoc()
{
// TODO: add one-time construction code here
}
CDrawingDoc::~CDrawingDoc()
{
}
BOOL CDrawingDoc::OnNewDocument()
{
if (!CDocument::OnNewDocument())
return FALSE;
// TODO: add reinitialization code here
// (SDI documents will reuse this document)
return TRUE;
}
/////////////////////////////////////////////////////////////////////////////
// CDrawingDoc serialization
void CDrawingDoc::Serialize(CArchive& ar)
{
if (ar.IsStoring())
{
//存储文件
// TODO: add storing code here
ar << m_slSum;
ar << point.size();
for(int i=0; i<point.size(); i++)
{
ar << point[i].GetOrderId();
ar << point[i].GetColor() << point[i].GetWidth() << point[i].GetMode();
ar << point[i].GetPoint().x << point[i].GetPoint().y;
}
ar << line.size();
for(i=0; i<line.size(); i++)
{
ar << line[i].GetOrderId();
ar << line[i].GetColor() << line[i].GetWidth() << line[i].GetMode();
ar << line[i].GetFirstPoint().x << line[i].GetFirstPoint().y;
ar << line[i].GetSecondPoint().x << line[i].GetSecondPoint().y;
}
ar << rect.size();
for(i=0; i<rect.size(); i++)
{
ar << rect[i].GetOrderId();
ar << rect[i].GetColor() << rect[i].GetWidth() << rect[i].GetMode();
ar << rect[i].GetFirstPoint().x << rect[i].GetFirstPoint().y;
ar << rect[i].GetSecondPoint().x << rect[i].GetSecondPoint().y;
}
ar << circle.size();
for(i=0; i<circle.size(); i++)
{
ar << circle[i].GetOrderId();
ar << circle[i].GetColor() << circle[i].GetWidth() << circle[i].GetMode();
ar << circle[i].GetFirstPoint().x << circle[i].GetFirstPoint().y;
ar << circle[i].GetSecondPoint().x << circle[i].GetSecondPoint().y;
}
ar << polygon.size();
for(i=0; i<polygon.size(); i++)
{
ar << polygon[i].GetOrderId();
ar << polygon[i].GetColor() << polygon[i].GetWidth() << polygon[i].GetMode();
PointVector pt = polygon[i].GetPolygonPoint();
ar << pt.size();
for(int j=0; j<pt.size(); j++)
ar << pt[j].x << pt[j].y;
}
}
else
{
//载入文件
// TODO: add loading code here
unsigned int size = 0;
COLORREF col;
int width;
int mode;
long id = 0;
ar >> m_slSum;
ar >> size;
point.reserve(size);
for(int i=0; i<size; i++)
{
GeoPoint pt;
ar >> id; pt.SetOrderId(id);
ar >> col; pt.SetColor(col);
ar >> width; pt.SetWidth(width);
ar >> mode; pt.SetMode(mode);
CPoint p;
ar >> p.x >> p.y;
pt.SetPoint(p);
point.push_back(pt);
}
ar >> size;
for(i=0; i<size; i++)
{
GeoLine _line;
ar >> id; _line.SetOrderId(id);
ar >> col; _line.SetColor(col);
ar >> width; _line.SetWidth(width);
ar >> mode; _line.SetMode(mode);
CPoint p[2];
ar >> p[0].x >> p[0].y;
ar >> p[1].x >> p[1].y;
_line.SetTwoPoint(p[0], p[1]);
line.push_back(_line);
}
ar >> size;
for(i=0; i<size; i++)
{
GeoRect _rect;
ar >> id; _rect.SetOrderId(id);
ar >> col; _rect.SetColor(col);
ar >> width; _rect.SetWidth(width);
ar >> mode; _rect.SetMode(mode);
CPoint p[2];
ar >> p[0].x >> p[0].y;
ar >> p[1].x >> p[1].y;
_rect.SetTwoPoint(p[0], p[1]);
rect.push_back(_rect);
}
ar >> size;
for(i=0; i<size; i++)
{
GeoCircle _circle;
ar >> id; _circle.SetOrderId(id);
ar >> col; _circle.SetColor(col);
ar >> width; _circle.SetWidth(width);
ar >> mode; _circle.SetMode(mode);
CPoint p[2];
ar >> p[0].x >> p[0].y;
ar >> p[1].x >> p[1].y;
_circle.SetTwoPoint(p[0], p[1]);
circle.push_back(_circle);
}
ar >> size;
for(i=0; i<size; i++)
{
GeoPolygon _polygon;
ar >> id; _polygon.SetOrderId(id);
ar >> col; _polygon.SetColor(col);
ar >> width; _polygon.SetWidth(width);
ar >> mode; _polygon.SetMode(mode);
PointVector pt;
unsigned int pt_size;
ar >> pt_size;
pt.reserve(pt_size);
CPoint p;
for(int j=0; j<pt_size; j++)
{
ar >> p.x >> p.y;
pt.push_back(p);
}
_polygon.SetPolygonPoint(pt);
polygon.push_back(_polygon);
}
}
}
/////////////////////////////////////////////////////////////////////////////
// CDrawingDoc diagnostics
#ifdef _DEBUG
void CDrawingDoc::AssertValid() const
{
CDocument::AssertValid();
}
void CDrawingDoc::Dump(CDumpContext& dc) const
{
CDocument::Dump(dc);
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CDrawingDoc commands
void CDrawingDoc::Add(GeoPoint _point)
{
point.push_back(_point);
}
void CDrawingDoc::Add(GeoLine _line)
{
line.push_back(_line);
}
void CDrawingDoc::Add(GeoRect _rect)
{
rect.push_back(_rect);
}
void CDrawingDoc::Add(GeoCircle _circle)
{
circle.push_back(_circle);
}
void CDrawingDoc::Add(GeoPolygon _polygon)
{
polygon.push_back(_polygon);
}
//建立新文件
void CDrawingDoc::OnFileNew()
{
// TODO: Add your command handler code here
CMainFrame *pFrame = (CMainFrame *)AfxGetApp()->GetMainWnd()->GetActiveWindow();
m_slSum = 0;
point.clear();
line.clear();
rect.clear();
circle.clear();
polygon.clear();
::SetWindowText(pFrame->GetSafeHwnd(), "画图");
UpdateAllViews(NULL);
char szFiter[] = "epc Files (*.daw)|*.daw||";
CFileDialog dlg(FALSE,"请输入文件名",NULL,
OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
szFiter,NULL);
dlg.m_ofn.lpstrTitle="创建新的文件";
CString str;
if(dlg.DoModal()==IDOK)
{
str = dlg.m_ofn.lpstrFile;
CFile file(str, CFile::modeReadWrite|CFile::modeCreate);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -