drawdoc.cpp
上传用户:szled88
上传日期:2015-04-09
资源大小:43957k
文件大小:8k
- // drawdoc.cpp : implementation of the CDrawDoc class
- //
- // This file is a part of the XTREME TOOLKIT PRO MFC class library.
- // (c)1998-2008 Codejock Software, All Rights Reserved.
- //
- // THIS SOURCE FILE IS THE PROPERTY OF CODEJOCK SOFTWARE AND IS NOT TO BE
- // RE-DISTRIBUTED BY ANY MEANS WHATSOEVER WITHOUT THE EXPRESSED WRITTEN
- // CONSENT OF CODEJOCK SOFTWARE.
- //
- // THIS SOURCE CODE CAN ONLY BE USED UNDER THE TERMS AND CONDITIONS OUTLINED
- // IN THE XTREME TOOLKIT PRO LICENSE AGREEMENT. CODEJOCK SOFTWARE GRANTS TO
- // YOU (ONE SOFTWARE DEVELOPER) THE LIMITED RIGHT TO USE THIS SOFTWARE ON A
- // SINGLE COMPUTER.
- //
- // CONTACT INFORMATION:
- // support@codejock.com
- // http://www.codejock.com
- //
- /////////////////////////////////////////////////////////////////////////////
- #include "stdafx.h"
- #include "drawcli.h"
- #include "drawdoc.h"
- #include "drawvw.h"
- #include "drawobj.h"
- #include "cntritem.h"
- #include "summpage.h"
- #include "statpage.h"
- #ifdef _DEBUG
- #undef THIS_FILE
- static char BASED_CODE THIS_FILE[] = __FILE__;
- #endif
- /////////////////////////////////////////////////////////////////////////////
- // CDrawDoc
- IMPLEMENT_DYNCREATE(CDrawDoc, COleDocument)
- BEGIN_MESSAGE_MAP(CDrawDoc, COleDocument)
- //{{AFX_MSG_MAP(CDrawDoc)
- ON_COMMAND(ID_VIEW_PAPERCOLOR, OnViewPaperColor)
- ON_COMMAND(ID_FILE_SUMMARYINFO, OnFileSummaryInfo)
- //}}AFX_MSG_MAP
- // Enable default OLE container implementation
- ON_UPDATE_COMMAND_UI(ID_EDIT_PASTE, COleDocument::OnUpdatePasteMenu)
- ON_UPDATE_COMMAND_UI(ID_EDIT_PASTE_LINK, COleDocument::OnUpdatePasteLinkMenu)
- ON_UPDATE_COMMAND_UI(ID_OLE_EDIT_LINKS, COleDocument::OnUpdateEditLinksMenu)
- ON_COMMAND(ID_OLE_EDIT_LINKS, COleDocument::OnEditLinks)
- ON_UPDATE_COMMAND_UI(ID_OLE_VERB_FIRST, COleDocument::OnUpdateObjectVerbMenu)
- // MAPI support
- ON_COMMAND(ID_FILE_SEND_MAIL, OnFileSendMail)
- ON_UPDATE_COMMAND_UI(ID_FILE_SEND_MAIL, OnUpdateFileSendMail)
- END_MESSAGE_MAP()
- /////////////////////////////////////////////////////////////////////////////
- // CDrawDoc construction/destruction
- CDrawDoc::CDrawDoc()
- {
- EnableCompoundFile();
- m_nMapMode = MM_ANISOTROPIC;
- m_paperColor = RGB(255, 255, 255);
- m_pSummInfo = NULL;
- ComputePageSize();
- }
- CDrawDoc::~CDrawDoc()
- {
- POSITION pos = m_objects.GetHeadPosition();
- while (pos != NULL)
- delete m_objects.GetNext(pos);
- delete m_pSummInfo;
- }
- BOOL CDrawDoc::OnNewDocument()
- {
- if (!COleDocument::OnNewDocument())
- return FALSE;
- // reinitialization code
- // (SDI documents will reuse this document)
- if(m_pSummInfo != NULL)
- delete m_pSummInfo;
- m_pSummInfo = new CSummInfo;
- // Title, Subject, Author, Keywords default to empty string
- // Comments, Template, SavedBy default to empty string
- // LastSave, LastPrint, EditTime, RevNum default to 0
- m_pSummInfo->StartEditTimeCount();
- m_pSummInfo->RecordCreateDate();
- m_pSummInfo->SetNumPages(1);
- // NumWords, NumChars default to 0
- m_pSummInfo->SetAppname( _T("DrawCli") );
- // Security defaults to 0
- return TRUE;
- }
- BOOL CDrawDoc::OnOpenDocument(LPCTSTR lpszPathName)
- {
- if( m_pSummInfo != NULL)
- delete m_pSummInfo;
- m_pSummInfo = new CSummInfo;
- m_pSummInfo->StartEditTimeCount();
- return COleDocument::OnOpenDocument(lpszPathName);
- }
- BOOL CDrawDoc::OnSaveDocument(LPCTSTR lpszPathName)
- {
- m_pSummInfo->RecordSaveDate();
- m_pSummInfo->IncrRevNum();
- m_pSummInfo->SetLastAuthor(m_pSummInfo->GetAuthor());
- m_pSummInfo->AddCountToEditTime();
- m_pSummInfo->StartEditTimeCount();
- return COleDocument::OnSaveDocument(lpszPathName);
- }
- /////////////////////////////////////////////////////////////////////////////
- // CDrawDoc serialization
- void CDrawDoc::Serialize(CArchive& ar)
- {
- if (ar.IsStoring())
- {
- ar << m_paperColor;
- m_objects.Serialize(ar);
- m_pSummInfo->WriteToStorage(m_lpRootStg);
- }
- else
- {
- ar >> m_paperColor;
- m_objects.Serialize(ar);
- m_pSummInfo->ReadFromStorage(m_lpRootStg);
- }
- // By calling the base class COleDocument, we enable serialization
- // of the container document's COleClientItem objects automatically.
- COleDocument::Serialize(ar);
- }
- /////////////////////////////////////////////////////////////////////////////
- // CDrawDoc implementation
- void CDrawDoc::Draw(CDC* pDC, CDrawView* pView)
- {
- POSITION pos = m_objects.GetHeadPosition();
- while (pos != NULL)
- {
- CDrawObj* pObj = m_objects.GetNext(pos);
- pObj->Draw(pDC);
- if (pView->m_bActive && !pDC->IsPrinting() && pView->IsSelected(pObj))
- pObj->DrawTracker(pDC, CDrawObj::selected);
- }
- }
- void CDrawDoc::Add(CDrawObj* pObj)
- {
- m_objects.AddTail(pObj);
- pObj->m_pDocument = this;
- SetModifiedFlag();
- }
- void CDrawDoc::Remove(CDrawObj* pObj)
- {
- // Find and remove from document
- POSITION pos = m_objects.Find(pObj);
- if (pos != NULL)
- m_objects.RemoveAt(pos);
- // set document modified flag
- SetModifiedFlag();
- // call remove for each view so that the view can remove from m_selection
- pos = GetFirstViewPosition();
- while (pos != NULL)
- ((CDrawView*)GetNextView(pos))->Remove(pObj);
- }
- // point is in logical coordinates
- CDrawObj* CDrawDoc::ObjectAt(const CPoint& point)
- {
- CRect rect(point, CSize(1, 1));
- POSITION pos = m_objects.GetTailPosition();
- while (pos != NULL)
- {
- CDrawObj* pObj = m_objects.GetPrev(pos);
- if (pObj->Intersects(rect))
- return pObj;
- }
- return NULL;
- }
- void CDrawDoc::ComputePageSize()
- {
- CSize new_size(850, 1100); // 8.5" x 11" default
- CPrintDialog dlg(FALSE);
- if (AfxGetApp()->GetPrinterDeviceDefaults(&dlg.m_pd))
- {
- // GetPrinterDC returns a HDC so attach it
- CDC dc;
- HDC hDC= dlg.CreatePrinterDC();
- ASSERT(hDC != NULL);
- dc.Attach(hDC);
- // Get the size of the page in loenglish
- new_size.cx = MulDiv(dc.GetDeviceCaps(HORZSIZE), 1000, 254);
- new_size.cy = MulDiv(dc.GetDeviceCaps(VERTSIZE), 1000, 254);
- }
- // if size changed then iterate over views and reset
- if (new_size != m_size)
- {
- m_size = new_size;
- POSITION pos = GetFirstViewPosition();
- while (pos != NULL)
- ((CDrawView*)GetNextView(pos))->SetPageSize(m_size);
- }
- }
- void CDrawDoc::OnViewPaperColor()
- {
- CColorDialog dlg;
- if (dlg.DoModal() != IDOK)
- return;
- m_paperColor = dlg.GetColor();
- SetModifiedFlag();
- UpdateAllViews(NULL);
- }
- /////////////////////////////////////////////////////////////////////////////
- // CDrawDoc diagnostics
- #ifdef _DEBUG
- void CDrawDoc::AssertValid() const
- {
- COleDocument::AssertValid();
- }
- void CDrawDoc::Dump(CDumpContext& dc) const
- {
- COleDocument::Dump(dc);
- }
- #endif //_DEBUG
- /////////////////////////////////////////////////////////////////////////////
- // CDrawDoc commands
- void CDrawDoc::OnFileSummaryInfo()
- {
- ASSERT_VALID(this);
- CPropertySheet sheet( _T("Document Properties") );
- CSummPage summ;
- CStatPage stat;
- sheet.AddPage( &summ );
- sheet.AddPage( &stat );
- summ.m_strAppname = m_pSummInfo->GetAppname();
- summ.m_strTitle = m_pSummInfo->GetTitle();
- summ.m_strSubj = m_pSummInfo->GetSubject();
- summ.m_strAuthor = m_pSummInfo->GetAuthor();
- summ.m_strKeywd = m_pSummInfo->GetKeywords();
- summ.m_strCmt = m_pSummInfo->GetComments();
- summ.m_strTempl = m_pSummInfo->GetTemplate();
- stat.m_strSavedBy = m_pSummInfo->GetLastAuthor();
- stat.m_strRevNum = m_pSummInfo->GetRevNum();
- stat.m_strEditTime = m_pSummInfo->GetEditTime();
- stat.m_strLastPrint = m_pSummInfo->GetLastPrintDate();
- stat.m_strCreateDate = m_pSummInfo->GetCreateDate();
- stat.m_strLastSave = m_pSummInfo->GetLastSaveDate();
- stat.m_strNumPages = m_pSummInfo->GetNumPages();
- stat.m_strNumWords = m_pSummInfo->GetNumWords();
- stat.m_strNumChars = m_pSummInfo->GetNumChars();
- stat.m_strSecurity = m_pSummInfo->GetSecurity();
- if (sheet.DoModal() != IDOK)
- return;
- m_pSummInfo->SetAuthor(summ.m_strAuthor);
- m_pSummInfo->SetKeywords(summ.m_strKeywd);
- m_pSummInfo->SetSubject(summ.m_strSubj);
- m_pSummInfo->SetComments(summ.m_strCmt);
- m_pSummInfo->SetTemplate(summ.m_strTempl);
- m_pSummInfo->SetTitle(summ.m_strTitle);
- SetModifiedFlag();
- }