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 + -
显示快捷键?