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

📄 paintdoc.cpp

📁 API经典入门
💻 CPP
字号:
// paintdoc.cpp : implementation of the CPaintDoc class
//

#include "stdafx.h"
#include "paint.h"

#include "paintdoc.h"

#ifdef _DEBUG
#undef THIS_FILE
static char BASED_CODE THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CPaintDoc

IMPLEMENT_DYNCREATE(CPaintDoc, CDocument)

BEGIN_MESSAGE_MAP(CPaintDoc, CDocument)
	//{{AFX_MSG_MAP(CPaintDoc)
	ON_COMMAND(ID_SHAPES_ARC, OnShapesArc)
	ON_UPDATE_COMMAND_UI(ID_SHAPES_ARC, OnUpdateShapesArc)
	ON_COMMAND(ID_SHAPES_CHORD, OnShapesChord)
	ON_UPDATE_COMMAND_UI(ID_SHAPES_CHORD, OnUpdateShapesChord)
	ON_COMMAND(ID_SHAPES_ELLIPSE, OnShapesEllipse)
	ON_UPDATE_COMMAND_UI(ID_SHAPES_ELLIPSE, OnUpdateShapesEllipse)
	ON_COMMAND(ID_SHAPES_PIE, OnShapesPie)
	ON_UPDATE_COMMAND_UI(ID_SHAPES_PIE, OnUpdateShapesPie)
	ON_COMMAND(ID_SHAPES_POLYGON, OnShapesPolygon)
	ON_UPDATE_COMMAND_UI(ID_SHAPES_POLYGON, OnUpdateShapesPolygon)
	ON_COMMAND(ID_SHAPES_POLYLINE, OnShapesPolyline)
	ON_UPDATE_COMMAND_UI(ID_SHAPES_POLYLINE, OnUpdateShapesPolyline)
	ON_COMMAND(ID_SHAPES_RECTANGE, OnShapesRectange)
	ON_UPDATE_COMMAND_UI(ID_SHAPES_RECTANGE, OnUpdateShapesRectange)
	ON_COMMAND(ID_SHAPES_ROUNDRECT, OnShapesRoundrect)
	ON_UPDATE_COMMAND_UI(ID_SHAPES_ROUNDRECT, OnUpdateShapesRoundrect)
	ON_COMMAND(ID_OPTIONS_DRAWPOINTS, OnOptionsDrawpoints)
	ON_UPDATE_COMMAND_UI(ID_OPTIONS_DRAWPOINTS, OnUpdateOptionsDrawpoints)
	ON_COMMAND(ID_MODES_POLYFILL, OnModesPolyfill)
	ON_UPDATE_COMMAND_UI(ID_MODES_POLYFILL, OnUpdateModesPolyfill)
	ON_COMMAND(ID_MODES_ROP2, OnModesRop2)
	ON_UPDATE_COMMAND_UI(ID_MODES_ROP2, OnUpdateModesRop2)
	ON_COMMAND(ID_OPTIONS_BRUSHSTYLE, OnOptionsBrushstyle)
	ON_UPDATE_COMMAND_UI(ID_OPTIONS_BRUSHSTYLE, OnUpdateOptionsBrushstyle)
	ON_COMMAND(ID_OPTIONS_PENSTYLE, OnOptionsPenstyle)
	ON_UPDATE_COMMAND_UI(ID_OPTIONS_PENSTYLE, OnUpdateOptionsPenstyle)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CPaintDoc construction/destruction

CPaintDoc::CPaintDoc()
{
	// TODO: add one-time construction code here
}

CPaintDoc::~CPaintDoc()
{
}

BOOL CPaintDoc::OnNewDocument()
{
	if (!CDocument::OnNewDocument())
		return FALSE;

	// TODO: add reinitialization code here
	// (SDI documents will reuse this document)
	
	m_nArraySize = 0;
	m_nTopElement = -1;

	m_bDrawPoints = TRUE;
	m_nPColor = m_nBColor = RGB (0, 0, 0);
	m_nPStyle = PS_SOLID;
	m_csPStyle = "PS_SOLID";
	m_nBStyle = -1;
	m_csBStyle = "SOLID";
	m_nShape = NO_SHAPE;
	m_nShapeSize = 50;
	
	m_nPolyFill = ALTERNATE;
	m_nROP2Mode = R2_COPYPEN;
	m_csROP2 = "R2_COPYPEN";

	return TRUE;
}

/////////////////////////////////////////////////////////////////////////////
// CPaintDoc serialization

void CPaintDoc::Serialize(CArchive& ar)
{
	if (ar.IsStoring())
	{
		// TODO: add storing code here
	}
	else
	{
		// TODO: add loading code here
	}
}

/////////////////////////////////////////////////////////////////////////////
// CPaintDoc diagnostics

#ifdef _DEBUG
void CPaintDoc::AssertValid() const
{
	CDocument::AssertValid();
}

void CPaintDoc::Dump(CDumpContext& dc) const
{
	CDocument::Dump(dc);
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CPaintDoc commands

void CPaintDoc::OnShapesArc()
{
	// TODO: Add your command handler code here
	
	m_nShape = ARC;
	UpdateAllViews(NULL);
}

void CPaintDoc::OnUpdateShapesArc(CCmdUI* pCmdUI)
{
	// TODO: Add your command update UI handler code here

	pCmdUI->SetRadio(m_nShape == ARC);	
}

void CPaintDoc::OnShapesChord()
{
	// TODO: Add your command handler code here
	
	m_nShape = CHORD;
	UpdateAllViews(NULL);
}

void CPaintDoc::OnUpdateShapesChord(CCmdUI* pCmdUI)
{
	// TODO: Add your command update UI handler code here
	
	pCmdUI->SetRadio(m_nShape == CHORD);
}

void CPaintDoc::OnShapesEllipse()
{
	// TODO: Add your command handler code here
	
	m_nShape = ELLIPSE;
	UpdateAllViews(NULL);
}

void CPaintDoc::OnUpdateShapesEllipse(CCmdUI* pCmdUI)
{
	// TODO: Add your command update UI handler code here
	
	pCmdUI->SetRadio(m_nShape == ELLIPSE);
}

void CPaintDoc::OnShapesPie()
{
	// TODO: Add your command handler code here
	
	m_nShape = PIE;
	UpdateAllViews(NULL);
}

void CPaintDoc::OnUpdateShapesPie(CCmdUI* pCmdUI)
{
	// TODO: Add your command update UI handler code here
	
	pCmdUI->SetRadio(m_nShape == PIE);
}

void CPaintDoc::OnShapesPolygon()
{
	// TODO: Add your command handler code here
	
	m_nShape = POLYGON;
	UpdateAllViews(NULL);
}

void CPaintDoc::OnUpdateShapesPolygon(CCmdUI* pCmdUI)
{
	// TODO: Add your command update UI handler code here
	
	pCmdUI->SetRadio(m_nShape == POLYGON);
}

void CPaintDoc::OnShapesPolyline()
{
	// TODO: Add your command handler code here
	
	m_nShape = POLYLINE;
	UpdateAllViews(NULL);
}

void CPaintDoc::OnUpdateShapesPolyline(CCmdUI* pCmdUI)
{
	// TODO: Add your command update UI handler code here
	
	pCmdUI->SetRadio(m_nShape == POLYLINE);
}

void CPaintDoc::OnShapesRectange()
{
	// TODO: Add your command handler code here
	
	m_nShape = RECTANGLE;
	UpdateAllViews(NULL);
}

void CPaintDoc::OnUpdateShapesRectange(CCmdUI* pCmdUI)
{
	// TODO: Add your command update UI handler code here
	
	pCmdUI->SetRadio(m_nShape == RECTANGLE);
}

void CPaintDoc::OnShapesRoundrect()
{
	// TODO: Add your command handler code here
	
	m_nShape = ROUNDRECT;
	UpdateAllViews(NULL);
}

void CPaintDoc::OnUpdateShapesRoundrect(CCmdUI* pCmdUI)
{
	// TODO: Add your command update UI handler code here
	
	pCmdUI->SetRadio(m_nShape == ROUNDRECT);
}

void CPaintDoc::OnOptionsDrawpoints()
{
	// TODO: Add your command handler code here
	
	m_bDrawPoints = !m_bDrawPoints;
	UpdateAllViews(NULL);
}

void CPaintDoc::OnUpdateOptionsDrawpoints(CCmdUI* pCmdUI)
{
	// TODO: Add your command update UI handler code here
	
	pCmdUI->SetCheck(m_bDrawPoints);
}

void CPaintDoc::OnModesPolyfill()
{
	if (m_nPolyFill == ALTERNATE)
		m_nPolyFill = WINDING;
	else
		m_nPolyFill = ALTERNATE;
		
	UpdateAllViews(NULL);	
}

void CPaintDoc::OnUpdateModesPolyfill(CCmdUI* pCmdUI)
{
	if (m_nPolyFill == ALTERNATE)
		pCmdUI->SetText("PolyFill: ALTERNATE");
	else
		pCmdUI->SetText("PolyFill: WINDING");	
}

void CPaintDoc::OnModesRop2()
{

	switch (m_nROP2Mode)
	{
		case R2_BLACK:
		m_nROP2Mode = R2_WHITE;
		m_csROP2 = "R2_WHITE";
		break;

		case R2_WHITE:
		m_nROP2Mode = R2_NOP;
		m_csROP2 = "R2_NOP";
		break;

		case R2_NOP:
		m_nROP2Mode = R2_NOT;
		m_csROP2 = "R2_NOT";
		break;

		case R2_NOT:
		m_nROP2Mode = R2_COPYPEN;
		m_csROP2 = "R2_COPYPEN";
		break;

		case R2_COPYPEN:
		m_nROP2Mode = R2_NOTCOPYPEN;
		m_csROP2 = "R2_NOTCOPYPEN";
		break;

		case R2_NOTCOPYPEN:
		m_nROP2Mode = R2_MERGEPENNOT;
		m_csROP2 = "R2_MERGEPENNOT";
		break;
		
		case R2_MERGEPENNOT:
		m_nROP2Mode = R2_MASKPENNOT;
		m_csROP2 = "R2_MASKPENNOT";
		break;
		
		case R2_MASKPENNOT:
		m_nROP2Mode = R2_MERGENOTPEN;
		m_csROP2 = "R2_MERGENOTPEN";
		break;
		
		case R2_MERGENOTPEN:
		m_nROP2Mode = R2_MASKNOTPEN;
		m_csROP2 = "R2_MASKNOTPEN";
		break;
		
		case R2_MASKNOTPEN:
		m_nROP2Mode = R2_MERGEPEN;
		m_csROP2 = "R2_MERGEPEN";
		break;
		
		case R2_MERGEPEN:
		m_nROP2Mode = R2_NOTMERGEPEN;
		m_csROP2 = "R2_NOTMERGEPEN";
		break;
		
		case R2_NOTMERGEPEN:
		m_nROP2Mode = R2_MASKPEN;
		m_csROP2 = "R2_MASKPEN";
		break;
		
		case R2_MASKPEN:
		m_nROP2Mode = R2_NOTMASKPEN;
		m_csROP2 = "R2_NOTMASKPEN";
		break;
		
		case R2_NOTMASKPEN:
		m_nROP2Mode = R2_XORPEN;
		m_csROP2 = "R2_XORPEN";
		break;
		
		case R2_XORPEN:
		m_nROP2Mode = R2_NOTXORPEN;
		m_csROP2 = "R2_NOTXORPEN";
		break;
		
		default:
		m_nROP2Mode = R2_BLACK;
		m_csROP2 = "R2_BLACK";
		break;
	}

	UpdateAllViews(NULL);
	
}

void CPaintDoc::OnUpdateModesRop2(CCmdUI* pCmdUI)
{
	pCmdUI->SetText("ROP2 Mode: " + m_csROP2);	
}

void CPaintDoc::OnOptionsBrushstyle()
{
	switch (m_nBStyle)
	{
		case HS_BDIAGONAL:
		m_nBStyle = HS_CROSS;
		m_csBStyle = "HS_CROSS";
		break;
		
		case HS_CROSS:
		m_nBStyle = HS_DIAGCROSS;
		m_csBStyle = "HS_DIAGCROSS";
		break;
		
		case HS_DIAGCROSS:
		m_nBStyle = HS_FDIAGONAL;
		m_csBStyle = "HS_FDIAGONAL";
		break;
		
		case HS_FDIAGONAL:
		m_nBStyle = HS_HORIZONTAL;
		m_csBStyle = "HS_HORIZONTAL";
		break;
		
		case HS_HORIZONTAL:
		m_nBStyle = HS_VERTICAL;
		m_csBStyle = "HS_VERTICAL";
		break;
		
		case HS_VERTICAL:
		m_nBStyle = -1;
		m_csBStyle = "SOLID";
		break;
		
		default:
		m_nBStyle = HS_BDIAGONAL;
		m_csBStyle = "HS_BDIAGONAL";
		break;
	}
	
	UpdateAllViews(NULL);	
}

void CPaintDoc::OnUpdateOptionsBrushstyle(CCmdUI* pCmdUI)
{
	pCmdUI->SetText("Brush &Hatch: " + m_csBStyle);	
}

void CPaintDoc::OnOptionsPenstyle()
{
	switch (m_nPStyle)
	{
		case PS_SOLID:
		m_nPStyle = PS_DASH;
		m_csPStyle = "PS_DASH";
		break;
		
		case PS_DASH:
		m_nPStyle = PS_DOT;
		m_csPStyle = "PS_DOT";
		break;

		case PS_DOT:
		m_nPStyle = PS_DASHDOT;
		m_csPStyle = "PS_DASHDOT";
		break;

		case PS_DASHDOT:
		m_nPStyle = PS_DASHDOTDOT;
		m_csPStyle = "PS_DASHDOTDOT";
		break;

		case PS_DASHDOTDOT:
		m_nPStyle = PS_NULL;
		m_csPStyle = "PS_NULL";
		break;

		case PS_NULL:
		m_nPStyle = PS_INSIDEFRAME;
		m_csPStyle = "PS_INSIDEFRAME";
		break;

		default:
		m_nPStyle = PS_SOLID;
		m_csPStyle = "PS_SOLID";
		break;

	}
	
	UpdateAllViews(NULL);	
}

void CPaintDoc::OnUpdateOptionsPenstyle(CCmdUI* pCmdUI)
{
	pCmdUI->SetText("Pen Style: " + m_csPStyle);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -