www.gusucode.com > VC++增强版画图板源码源码程序 > VC++增强版画图板源码源码程序\code\HDraw\HDrawDoc.cpp
// HDrawDoc.cpp : implementation of the CHDrawDoc class // Download by http://www.NewXing.com #include "stdafx.h" #include "HDraw.h" #include "HDrawDoc.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CHDrawDoc IMPLEMENT_DYNCREATE(CHDrawDoc, CDocument) BEGIN_MESSAGE_MAP(CHDrawDoc, CDocument) //{{AFX_MSG_MAP(CHDrawDoc) ON_COMMAND(ID_DRAW_CLEAR, OnDrawClear) ON_COMMAND(ID_DRAW_ELLIPSE, OnDrawEllipse) ON_COMMAND(ID_DRAW_LINE, OnDrawLine) ON_COMMAND(ID_DRAW_POLY, OnDrawPoly) ON_COMMAND(ID_DRAW_RECT, OnDrawRect) ON_COMMAND(ID_DRAW_SET, OnDrawSet) ON_COMMAND(ID_DRAW_TEXT, OnDrawText) ON_COMMAND(ID_BT_W1, OnBtW1) ON_COMMAND(ID_BT_W2, OnBtW2) ON_COMMAND(ID_BT_W3, OnBtW3) ON_UPDATE_COMMAND_UI(ID_BT_W1, OnUpdateBtW1) ON_UPDATE_COMMAND_UI(ID_BT_W2, OnUpdateBtW2) ON_UPDATE_COMMAND_UI(ID_BT_W3, OnUpdateBtW3) ON_UPDATE_COMMAND_UI(ID_DRAW_ELLIPSE, OnUpdateDrawEllipse) ON_UPDATE_COMMAND_UI(ID_DRAW_LINE, OnUpdateDrawLine) ON_UPDATE_COMMAND_UI(ID_DRAW_POLY, OnUpdateDrawPoly) ON_UPDATE_COMMAND_UI(ID_DRAW_RECT, OnUpdateDrawRect) ON_UPDATE_COMMAND_UI(ID_DRAW_TEXT, OnUpdateDrawText) ON_COMMAND(ID_PEN_DASH, OnPenDash) ON_UPDATE_COMMAND_UI(ID_PEN_DASH, OnUpdatePenDash) ON_COMMAND(ID_PEN_SOLID, OnPenSolid) ON_UPDATE_COMMAND_UI(ID_PEN_SOLID, OnUpdatePenSolid) ON_UPDATE_COMMAND_UI(ID_EDIT_UNDO, OnUpdateEditUndo) ON_UPDATE_COMMAND_UI(ID_EDIT_REDO, OnUpdateEditRedo) ON_COMMAND(ID_EDIT_REDO, OnEditRedo) ON_COMMAND(ID_EDIT_UNDO, OnEditUndo) ON_COMMAND(ID_SELECT, OnSelect) ON_UPDATE_COMMAND_UI(ID_SELECT, OnUpdateSelect) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CHDrawDoc construction/destruction CHDrawDoc::CHDrawDoc() { m_picType = PIC_line; m_picColor = RGB(0,0,0); m_picWidth = 1; m_picStyle = PS_SOLID; m_cavasH = 300; m_cavasW = 600; m_backup_index = 0; BackUp(); } CHDrawDoc::~CHDrawDoc() { DeleteContents(); //backup information for(int i = 0; i < m_backup.GetSize(); i ++){ CFile::Remove(m_backup.GetAt(i)); } m_backup.RemoveAll(); } BOOL CHDrawDoc::OnNewDocument() { if (!CDocument::OnNewDocument()) return FALSE; return TRUE; } ///////////////////////////////////////////////////////////////////////////// // CHDrawDoc serialization void CHDrawDoc::Serialize(CArchive& ar) { if (ar.IsStoring()) { // TODO: add storing code here ar<<m_cavasH<<m_cavasW; m_strokeList.Serialize(ar); } else { // TODO: add loading code here ar>>m_cavasH>>m_cavasW; m_strokeList.Serialize(ar); } } ///////////////////////////////////////////////////////////////////////////// // CHDrawDoc diagnostics #ifdef _DEBUG void CHDrawDoc::AssertValid() const { CDocument::AssertValid(); } void CHDrawDoc::Dump(CDumpContext& dc) const { CDocument::Dump(dc); } #endif //_DEBUG HStroke * CHDrawDoc::NewStroke() { HStroke *p; switch(m_picType){ case PIC_line: p = new HStrokeLine(); break; case PIC_poly: p = new HStrokePoly(); break; case PIC_ellipse: p = new HStrokeEllipse(); break; case PIC_rect: p = new HStrokeRect(); break; case PIC_text: p = new HStrokeText(m_picInfo); break; case PIC_select: p = new HStrokeSelect(); break; default: p = NULL; } p->m_penColor = m_picColor; p->m_penWidth = m_picWidth; p->m_penStyle = m_picStyle; return p; } ///////////////////////////////////////////////////////////////////////////// // CHDrawDoc commands void CHDrawDoc::OnDrawClear() { // TODO: Add your command handler code here m_strokeList.RemoveAll(); UpdateAllViews(NULL); } void CHDrawDoc::OnDrawEllipse() { // TODO: Add your command handler code here m_picType = PIC_ellipse; } void CHDrawDoc::OnDrawLine() { // TODO: Add your command handler code here m_picType = PIC_line; } void CHDrawDoc::OnDrawPoly() { // TODO: Add your command handler code here m_picType = PIC_poly; } void CHDrawDoc::OnDrawRect() { // TODO: Add your command handler code here m_picType = PIC_rect; } //设置图形参数和其它属性 void CHDrawDoc::OnDrawSet() { // TODO: Add your command handler code here HStrokeEditDlg dlg; dlg.setStrokeList(&m_strokeList); dlg.DoModal(); } void CHDrawDoc::OnDrawText() { // TODO: Add your command handler code here HStrokeTextDlg dlg; if(dlg.DoModal() == IDOK){ m_picType = PIC_text; m_picInfo = dlg.m_editText; } } void CHDrawDoc::OnBtW1() { m_picWidth = 1; for(int i = 0; i < m_strokeList.GetSize(); i ++){ if(m_strokeList.GetAt(i)->m_bSelected){ m_strokeList.GetAt(i)->m_penWidth = m_picWidth; } } UpdateAllViews(NULL); } void CHDrawDoc::OnBtW2() { // TODO: Add your command handler code here m_picWidth = 2; for(int i = 0; i < m_strokeList.GetSize(); i ++){ if(m_strokeList.GetAt(i)->m_bSelected){ m_strokeList.GetAt(i)->m_penWidth = m_picWidth; } } UpdateAllViews(NULL); } void CHDrawDoc::OnBtW3() { // TODO: Add your command handler code here m_picWidth = 3; for(int i = 0; i < m_strokeList.GetSize(); i ++){ if(m_strokeList.GetAt(i)->m_bSelected){ m_strokeList.GetAt(i)->m_penWidth = m_picWidth; } } UpdateAllViews(NULL); } void CHDrawDoc::OnUpdateBtW1(CCmdUI* pCmdUI) { // TODO: Add your command update UI handler code here pCmdUI->SetCheck(1 == m_picWidth); } void CHDrawDoc::OnUpdateBtW2(CCmdUI* pCmdUI) { // TODO: Add your command update UI handler code here pCmdUI->SetCheck(2 == m_picWidth); } void CHDrawDoc::OnUpdateBtW3(CCmdUI* pCmdUI) { // TODO: Add your command update UI handler code here pCmdUI->SetCheck(2 < m_picWidth); } void CHDrawDoc::OnUpdateDrawEllipse(CCmdUI* pCmdUI) { // TODO: Add your command update UI handler code here pCmdUI->SetCheck(PIC_ellipse == m_picType); } void CHDrawDoc::OnUpdateDrawLine(CCmdUI* pCmdUI) { // TODO: Add your command update UI handler code here pCmdUI->SetCheck(PIC_line == m_picType); } void CHDrawDoc::OnUpdateDrawPoly(CCmdUI* pCmdUI) { // TODO: Add your command update UI handler code here pCmdUI->SetCheck(PIC_poly == m_picType); } void CHDrawDoc::OnUpdateDrawRect(CCmdUI* pCmdUI) { // TODO: Add your command update UI handler code here pCmdUI->SetCheck(PIC_rect == m_picType); } void CHDrawDoc::OnUpdateDrawText(CCmdUI* pCmdUI) { // TODO: Add your command update UI handler code here pCmdUI->SetCheck(PIC_text == m_picType); } void CHDrawDoc::OnPenDash() { // TODO: Add your command handler code here m_picStyle = PS_DASH; for(int i = 0; i < m_strokeList.GetSize(); i ++){ if(m_strokeList.GetAt(i)->m_bSelected ||m_strokeList.GetAt(i)->m_bHighLight){ m_strokeList.GetAt(i)->m_penStyle = m_picStyle; } } BackUp(); UpdateAllViews(NULL); } void CHDrawDoc::OnUpdatePenDash(CCmdUI* pCmdUI) { // TODO: Add your command update UI handler code here pCmdUI->SetCheck(PS_DASH == m_picStyle); } void CHDrawDoc::OnPenSolid() { // TODO: Add your command handler code here m_picStyle = PS_SOLID; for(int i = 0; i < m_strokeList.GetSize(); i ++){ if(m_strokeList.GetAt(i)->m_bSelected ||m_strokeList.GetAt(i)->m_bHighLight){ m_strokeList.GetAt(i)->m_penStyle = m_picStyle; } } BackUp(); UpdateAllViews(NULL); } void CHDrawDoc::OnUpdatePenSolid(CCmdUI* pCmdUI) { // TODO: Add your command update UI handler code here pCmdUI->SetCheck(PS_SOLID == m_picStyle); } void CHDrawDoc::BackUp() { //CArchive cr; CString fileName; fileName.Format("C:\\Windows\\Temp\\hankjin.temp.%d", m_backup.GetSize()); OnSaveDocument(fileName); m_backup.InsertAt(m_backup_index, fileName); m_backup_index ++; } void CHDrawDoc::ReStore(BOOL backward) { m_backup_index -= backward ? 1 : -1; //make m_backup[m_backup_index] the current document data OnOpenDocument(m_backup.GetAt(m_backup_index-1)); } void CHDrawDoc::OnUpdateEditRedo(CCmdUI* pCmdUI) { // TODO: Add your command update UI handler code here pCmdUI->Enable(m_backup_index < m_backup.GetSize()); } void CHDrawDoc::OnUpdateEditUndo(CCmdUI* pCmdUI) { // TODO: Add your command update UI handler code here pCmdUI->Enable(m_backup_index > 1); } void CHDrawDoc::OnEditRedo() { // TODO: Add your command handler code here ReStore(FALSE); UpdateAllViews(NULL); } void CHDrawDoc::OnEditUndo() { // TODO: Add your command handler code here ReStore(TRUE); UpdateAllViews(NULL); } void CHDrawDoc::DeleteContents() { // TODO: Add your specialized code here and/or call the base class //strokeList for(int i = 0; i < m_strokeList.GetSize(); i ++) delete m_strokeList.ElementAt(i); m_strokeList.RemoveAll(); CDocument::DeleteContents(); } void CHDrawDoc::OnSelect() { // TODO: Add your command handler code here m_picType = PIC_select; } void CHDrawDoc::OnUpdateSelect(CCmdUI* pCmdUI) { // TODO: Add your command update UI handler code here pCmdUI->SetCheck(PIC_select == m_picType); }