📄 drawdoc.cpp
字号:
// DrawDoc.cpp : implementation of the CDrawDoc class
//
#include "stdafx.h"
#include "Draw.h"
#include "PenDialog.h"
#include "DrawDoc.h"
#include "math.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CDrawDoc
enum {DRAW_VCLINE,DRAW_BEZIER,DRAW_RECTANGLE,DRAW_VCCIRCLE,DRAW_VCELLIPSE,DRAW_POLYGON};
IMPLEMENT_DYNCREATE(CDrawDoc, CDocument)
BEGIN_MESSAGE_MAP(CDrawDoc, CDocument)
//{{AFX_MSG_MAP(CDrawDoc)
ON_COMMAND(ID_EDIT_UNDO, OnEditUndo)
ON_UPDATE_COMMAND_UI(ID_EDIT_UNDO, OnUpdateEditUndo)
ON_COMMAND(ID_DRAW_VCLINE, OnDrawVcline)
ON_COMMAND(ID_DRAW_VCCIRCLE, OnDrawVccircle)
ON_COMMAND(ID_DRAW_VCELLIPSE, OnDrawVcellipse)
ON_COMMAND(ID_DRAW_BEZIER, OnDrawBezier)
ON_COMMAND(ID_DRAW_POLYGON, OnDrawPolygon)
ON_COMMAND(ID_DRAW_RECTANGLE, OnDrawRectangle)
ON_COMMAND(ID_OPTIONS_COLOR, OnOptionsColor)
ON_COMMAND(ID_OPTIONS_FILLCOLOR, OnOptionsFillcolor)
ON_COMMAND(ID_OPTIONS_HATCHB, OnOptionsHatchb)
ON_COMMAND(ID_OPTIONS_HATCHC, OnOptionsHatchc)
ON_COMMAND(ID_OPTIONS_HATCHD, OnOptionsHatchd)
ON_COMMAND(ID_OPTIONS_HATCHF, OnOptionsHatchf)
ON_COMMAND(ID_OPTIONS_HATCHH, OnOptionsHatchh)
ON_COMMAND(ID_OPTIONS_HATCHNULL, OnOptionsHatchnull)
ON_COMMAND(ID_OPTIONS_HATCHV, OnOptionsHatchv)
ON_COMMAND(ID_OPTIONS_PEN, OnOptionsPen)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CDrawDoc construction/destruction
CDrawDoc::CDrawDoc()
{
// TODO: add one-time construction code here
CurrentDraw=DRAW_VCLINE;
DrawType=0;
m_pWidth=1;
m_pStyle=PEN_STYLE_SOLID;
m_pColor=RGB(0,0,0);
m_FFlag=0;
m_FColor=RGB(0,0,0);
m_HFlag=0;
}
CDrawDoc::~CDrawDoc()
{
}
BOOL CDrawDoc::OnNewDocument()
{
if (!CDocument::OnNewDocument())
return FALSE;
// TODO: add reinitialization code here
// (SDI documents will reuse this document)
return TRUE;
}
void CDrawDoc::AddShape(CShape *pShape)
{
m_ObArray.Add(pShape);
SetModifiedFlag();
}
CShape *CDrawDoc::GetShape(int index)
{
if(index<0||index>m_ObArray.GetUpperBound())return 0;
return(CShape *)m_ObArray.GetAt(index);
}
int CDrawDoc::GetShapeNumber()
{
return m_ObArray.GetSize();
}
/////////////////////////////////////////////////////////////////////////////
// CDrawDoc serialization
void CDrawDoc::Serialize(CArchive& ar)
{
if (ar.IsStoring())
{
// TODO: add storing code here
}
else
{
// TODO: add loading code here
}
m_ObArray.Serialize(ar);
}
/////////////////////////////////////////////////////////////////////////////
// CDrawDoc diagnostics
#ifdef _DEBUG
void CDrawDoc::AssertValid() const
{
CDocument::AssertValid();
}
void CDrawDoc::Dump(CDumpContext& dc) const
{
CDocument::Dump(dc);
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CDrawDoc commands
void CDrawDoc::DeleteContents()
{
// TODO: Add your specialized code here and/or call the base class
int index;
index=m_ObArray.GetSize();
while(index--)
delete m_ObArray.GetAt(index);
m_ObArray.RemoveAll();
UpdateAllViews(NULL);
}
void CDrawDoc::OnEditUndo()
{
// TODO: Add your command handler code here
int index;
index=m_ObArray.GetUpperBound();
if(index>=0)
{
delete m_ObArray.GetAt(index);
m_ObArray.RemoveAt(index);
}
UpdateAllViews(NULL);
SetModifiedFlag();
}
void CDrawDoc::OnUpdateEditUndo(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
pCmdUI->Enable(m_ObArray.GetSize());
}
void CDrawDoc::OnDrawVcline()
{
// TODO: Add your command handler code here
CurrentDraw=DRAW_VCLINE;
}
void CDrawDoc::OnDrawVccircle()
{
// TODO: Add your command handler code here
CurrentDraw=DRAW_VCCIRCLE;
}
void CDrawDoc::OnDrawVcellipse()
{
// TODO: Add your command handler code here
CurrentDraw=DRAW_VCELLIPSE;
}
void CDrawDoc::OnDrawBezier()
{
// TODO: Add your command handler code here
CurrentDraw=DRAW_BEZIER;
}
void CDrawDoc::OnDrawPolygon()
{
// TODO: Add your command handler code here
CurrentDraw=DRAW_POLYGON;
}
void CDrawDoc::OnDrawRectangle()
{
// TODO: Add your command handler code here
CurrentDraw=DRAW_RECTANGLE;
}
void CDrawDoc::OnOptionsColor()
{
// TODO: Add your command handler code here
CColorDialog ColorDialog;
if(ColorDialog.DoModal()==IDOK)
m_pColor=ColorDialog.GetColor();
}
void CDrawDoc::OnOptionsFillcolor()
{
// TODO: Add your command handler code here
CColorDialog ColorDialog;
if(ColorDialog.DoModal()==IDOK)
m_FColor=ColorDialog.GetColor();
m_FFlag=1;
}
void CDrawDoc::OnOptionsHatchb()
{
// TODO: Add your command handler code here
m_Hatch=HS_BDIAGONAL;
m_HFlag=1;
m_FFlag=1;
}
void CDrawDoc::OnOptionsHatchc()
{
// TODO: Add your command handler code here
m_Hatch=HS_CROSS;
m_HFlag=1;
m_FFlag=1;
}
void CDrawDoc::OnOptionsHatchd()
{
// TODO: Add your command handler code here
m_Hatch=HS_DIAGCROSS;
m_HFlag=1;
m_FFlag=1;
}
void CDrawDoc::OnOptionsHatchf()
{
// TODO: Add your command handler code here
m_Hatch=HS_FDIAGONAL;
m_HFlag=1;
m_FFlag=1;
}
void CDrawDoc::OnOptionsHatchh()
{
// TODO: Add your command handler code here
m_Hatch=HS_HORIZONTAL;
m_HFlag=1;
m_FFlag=1;
}
void CDrawDoc::OnOptionsHatchnull()
{
// TODO: Add your command handler code here
m_HFlag=0;
}
void CDrawDoc::OnOptionsHatchv()
{
// TODO: Add your command handler code here
m_Hatch=HS_VERTICAL;
m_HFlag=1;
m_FFlag=1;
}
void CDrawDoc::OnOptionsPen()
{
// TODO: Add your command handler code here
CPenDialog PenDialog;
PenDialog.m_pWidth=m_pWidth;
PenDialog.m_pStyle=m_pStyle;
if(PenDialog.DoModal()==IDOK)
{
m_pWidth=PenDialog.m_pWidth;
m_pStyle=PenDialog.m_pStyle;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -