⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 drawingdoc.cpp

📁 软件参考Windows操作系统下的画图程序
💻 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 + -