day10doc.cpp

来自「学习VC的一些例子」· C++ 代码 · 共 330 行

CPP
330
字号
// Day10Doc.cpp : implementation of the CDay10Doc class
//

#include "stdafx.h"
#include "Day10.h"
#include "Line.h"
#include "MainFrm.h"

#include "Day10Doc.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CDay10Doc

IMPLEMENT_DYNCREATE(CDay10Doc, CDocument)

BEGIN_MESSAGE_MAP(CDay10Doc, CDocument)
	//{{AFX_MSG_MAP(CDay10Doc)
	ON_UPDATE_COMMAND_UI(ID_WIDTH_MEDIUM, OnUpdateWidthCommand)
	ON_COMMAND(ID_COLOR_BLACK, OnColorBlack)
	ON_UPDATE_COMMAND_UI(ID_COLOR_BLACK, OnUpdateColorBlack)
	ON_COMMAND(ID_COLOR_BLUE, OnColorBlue)
	ON_UPDATE_COMMAND_UI(ID_COLOR_BLUE, OnUpdateColorBlue)
	ON_COMMAND(ID_COLOR_CYAN, OnColorCyan)
	ON_UPDATE_COMMAND_UI(ID_COLOR_CYAN, OnUpdateColorCyan)
	ON_COMMAND(ID_COLOR_GREEN, OnColorGreen)
	ON_UPDATE_COMMAND_UI(ID_COLOR_GREEN, OnUpdateColorGreen)
	ON_COMMAND(ID_COLOR_MAGENTA, OnColorMagenta)
	ON_UPDATE_COMMAND_UI(ID_COLOR_MAGENTA, OnUpdateColorMagenta)
	ON_COMMAND(ID_COLOR_RED, OnColorRed)
	ON_UPDATE_COMMAND_UI(ID_COLOR_RED, OnUpdateColorRed)
	ON_COMMAND(ID_COLOR_WHITE, OnColorWhite)
	ON_UPDATE_COMMAND_UI(ID_COLOR_WHITE, OnUpdateColorWhite)
	ON_COMMAND(ID_COLOR_YELLOW, OnColorYellow)
	ON_UPDATE_COMMAND_UI(ID_COLOR_YELLOW, OnUpdateColorYellow)
	ON_UPDATE_COMMAND_UI(ID_WIDTH_THICK, OnUpdateWidthCommand)
	ON_UPDATE_COMMAND_UI(ID_WIDTH_THIN, OnUpdateWidthCommand)
	ON_UPDATE_COMMAND_UI(ID_WIDTH_VERYTHICK, OnUpdateWidthCommand)
	ON_UPDATE_COMMAND_UI(ID_WIDTH_VERYTHIN, OnUpdateWidthCommand)
	ON_COMMAND(ID_WIDTH_MEDIUM, OnWidthMedium)
	ON_COMMAND(ID_WIDTH_THICK, OnWidthThick)
	ON_COMMAND(ID_WIDTH_THIN, OnWidthThin)
	ON_COMMAND(ID_WIDTH_VERYTHICK, OnWidthVerythick)
	ON_COMMAND(ID_WIDTH_VERYTHIN, OnWidthVerythin)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

const COLORREF CDay10Doc::m_crColor[8] =
{
	RGB(  0,   0,   0),
	RGB(  0,   0, 255),
	RGB(  0, 255,   0),
	RGB(  0, 255, 255),
	RGB(255,   0,   0),
	RGB(255,   0, 255),
	RGB(255, 255,   0),
	RGB(255, 255, 255)
};

/////////////////////////////////////////////////////////////////////////////
// CDay10Doc construction/destruction

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

}

CDay10Doc::~CDay10Doc()
{
}

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

	// TODO: add reinitialization code here
	// (SDI documents will reuse this document)

	m_nColor = ID_COLOR_BLACK - ID_COLOR_BLACK;
	m_nWidth = ID_WIDTH_VERYTHIN - ID_WIDTH_VERYTHIN;

	return TRUE;
}



/////////////////////////////////////////////////////////////////////////////
// CDay10Doc serialization

void CDay10Doc::Serialize(CArchive& ar)
{
	m_oaLines.Serialize(ar);
}

/////////////////////////////////////////////////////////////////////////////
// CDay10Doc diagnostics

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

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

/////////////////////////////////////////////////////////////////////////////
// CDay10Doc commands

CLine * CDay10Doc::AddLine(CPoint ptFrom, CPoint ptTo)
{
	static UINT nWidth[5] = {1, 8, 16, 24, 32};

	// Create a new CLine object
	CLine *pLine = new CLine(ptFrom, ptTo, m_crColor[m_nColor], nWidth[m_nWidth]);
	
	try
	{
		// Add the new line to the object annay
		m_oaLines.Add(pLine);
		// Mark the document as dirty
		SetModifiedFlag();
	}

	// Did we run into a memory exception?
	catch (CMemoryException* perr)
	{
		// Display a message fon the user, giving him or her the
		// bad news
		AfxMessageBox("out of memory", MB_ICONSTOP | MB_OK);
		
		// Did we create a line object
		if (pLine)
		{
			// Delete it
			delete pLine;
			pLine = NULL;
		}
		
		// Delete the exception object
		perr->Delete();
	}
	
	return pLine;
}

int CDay10Doc::GetLineCount()
{
	return m_oaLines.GetSize();
}

CLine* CDay10Doc::GetLine(int nIndex)
{
	return (CLine *) m_oaLines[nIndex];
}

void CDay10Doc::DeleteContents() 
{
	// TODO: Add your specialized code here and/or call the base class

	// Get the number of lines in the document
	int liCount = m_oaLines.GetSize();
	int liPos;
	
	// Are there any lines in the arrary
	if (liCount)
	{
		// Loop through the arrary, delete each object
		for (liPos = 0; liPos < liCount; liPos++)
			delete m_oaLines[liPos];

		m_oaLines.RemoveAll();
	}

	CDocument::DeleteContents();
}

UINT CDay10Doc::GetColor()
{
	return ID_COLOR_BLACK + m_nColor;
}

void CDay10Doc::OnColorBlack() 
{
	// TODO: Add your command handler code here
	m_nColor = ID_COLOR_BLACK - ID_COLOR_BLACK;
}

void CDay10Doc::OnUpdateColorBlack(CCmdUI* pCmdUI) 
{
	// TODO: Add your command update UI handler code here
	pCmdUI->SetCheck(GetColor() == ID_COLOR_BLACK ? 1 : 0);
}

void CDay10Doc::OnColorBlue() 
{
	// TODO: Add your command handler code here
	m_nColor = ID_COLOR_BLUE - ID_COLOR_BLACK;
}

void CDay10Doc::OnUpdateColorBlue(CCmdUI* pCmdUI) 
{
	// TODO: Add your command update UI handler code here
	pCmdUI->SetCheck(GetColor() == ID_COLOR_BLUE ? 1 : 0);
}

void CDay10Doc::OnColorCyan() 
{
	// TODO: Add your command handler code here
	m_nColor = ID_COLOR_CYAN - ID_COLOR_BLACK;
}

void CDay10Doc::OnUpdateColorCyan(CCmdUI* pCmdUI) 
{
	// TODO: Add your command update UI handler code here
	pCmdUI->SetCheck(GetColor() == ID_COLOR_CYAN ? 1 : 0);
}

void CDay10Doc::OnColorGreen() 
{
	// TODO: Add your command handler code here
	m_nColor = ID_COLOR_GREEN - ID_COLOR_BLACK;
}

void CDay10Doc::OnUpdateColorGreen(CCmdUI* pCmdUI) 
{
	// TODO: Add your command update UI handler code here
	pCmdUI->SetCheck(GetColor() == ID_COLOR_GREEN ? 1 : 0);
}

void CDay10Doc::OnColorMagenta() 
{
	// TODO: Add your command handler code here
	m_nColor = ID_COLOR_MAGENTA - ID_COLOR_BLACK;
}

void CDay10Doc::OnUpdateColorMagenta(CCmdUI* pCmdUI) 
{
	// TODO: Add your command update UI handler code here
	pCmdUI->SetCheck(GetColor() == ID_COLOR_MAGENTA ? 1 : 0);
}

void CDay10Doc::OnColorRed() 
{
	// TODO: Add your command handler code here
	m_nColor = ID_COLOR_RED - ID_COLOR_BLACK;
}

void CDay10Doc::OnUpdateColorRed(CCmdUI* pCmdUI) 
{
	// TODO: Add your command update UI handler code here
	pCmdUI->SetCheck(GetColor() == ID_COLOR_RED ? 1 : 0);
}

void CDay10Doc::OnColorWhite() 
{
	// TODO: Add your command handler code here
	m_nColor = ID_COLOR_WHITE - ID_COLOR_BLACK;
}

void CDay10Doc::OnUpdateColorWhite(CCmdUI* pCmdUI) 
{
	// TODO: Add your command update UI handler code here
	pCmdUI->SetCheck(GetColor() == ID_COLOR_WHITE ? 1 : 0);
}

void CDay10Doc::OnColorYellow() 
{
	// TODO: Add your command handler code here
	m_nColor = ID_COLOR_YELLOW - ID_COLOR_BLACK;
}

void CDay10Doc::OnUpdateColorYellow(CCmdUI* pCmdUI) 
{
	// TODO: Add your command update UI handler code here
	pCmdUI->SetCheck(GetColor() == ID_COLOR_YELLOW ? 1 : 0);
}

UINT CDay10Doc::GetWidth()
{
	return ID_WIDTH_VERYTHIN + m_nWidth;
}

void CDay10Doc::OnUpdateWidthCommand(CCmdUI* pCmdUI) 
{
	// TODO: Add your command update UI handler code here
	pCmdUI->SetCheck(GetWidth() == pCmdUI->m_nID ? 1 : 0);
}


void CDay10Doc::OnWidthMedium() 
{
	// TODO: Add your command handler code here
	m_nWidth = ID_WIDTH_MEDIUM - ID_WIDTH_VERYTHIN;
}

void CDay10Doc::OnWidthThick() 
{
	// TODO: Add your command handler code here
	m_nWidth = ID_WIDTH_THICK - ID_WIDTH_VERYTHIN;
}

void CDay10Doc::OnWidthThin() 
{
	// TODO: Add your command handler code here
	m_nWidth = ID_WIDTH_THIN - ID_WIDTH_VERYTHIN;
}

void CDay10Doc::OnWidthVerythick() 
{
	// TODO: Add your command handler code here
	m_nWidth = ID_WIDTH_VERYTHICK - ID_WIDTH_VERYTHIN;
}

void CDay10Doc::OnWidthVerythin() 
{
	// TODO: Add your command handler code here
	m_nWidth = ID_WIDTH_VERYTHIN - ID_WIDTH_VERYTHIN;
}

⌨️ 快捷键说明

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