maindoc.cpp
资源名称:COM 原理与应用.rar [点击查看]
上传用户:biuytresa
上传日期:2007-12-07
资源大小:721k
文件大小:5k
源码类别:
DNA
开发平台:
Visual C++
- // maindoc.cpp : implementation of the CMainDoc class
- //
- // This is a part of the Microsoft Foundation Classes C++ library.
- // Copyright (C) 1992-1998 Microsoft Corporation
- // All rights reserved.
- //
- // This source code is only intended as a supplement to the
- // Microsoft Foundation Classes Reference and related
- // electronic documentation provided with the library.
- // See these sources for detailed information regarding the
- // Microsoft Foundation Classes product.
- #include "stdafx.h"
- #include "oclient.h"
- #include "maindoc.h"
- #include "rectitem.h"
- #ifdef _DEBUG
- #undef THIS_FILE
- static char BASED_CODE THIS_FILE[] = __FILE__;
- #endif
- // private clipboard format
- CLIPFORMAT CMainDoc::m_cfPrivate = NULL;
- /////////////////////////////////////////////////////////////////////////////
- // CMainDoc
- IMPLEMENT_DYNCREATE(CMainDoc, COleLinkingDoc)
- BEGIN_MESSAGE_MAP(CMainDoc, COleLinkingDoc)
- //{{AFX_MSG_MAP(CMainDoc)
- ON_COMMAND(ID_EDIT_CLEAR_ALL, OnEditClearAll)
- ON_UPDATE_COMMAND_UI(ID_EDIT_CLEAR_ALL, OnUpdateEditClearAll)
- //}}AFX_MSG_MAP
- ON_UPDATE_COMMAND_UI(ID_EDIT_PASTE, OnUpdatePasteMenu)
- ON_UPDATE_COMMAND_UI(ID_EDIT_PASTE_LINK, OnUpdatePasteLinkMenu)
- ON_UPDATE_COMMAND_UI(ID_OLE_EDIT_LINKS, OnUpdateEditLinksMenu)
- ON_COMMAND(ID_OLE_EDIT_LINKS, OnEditLinks)
- ON_UPDATE_COMMAND_UI(ID_OLE_VERB_FIRST, OnUpdateObjectVerbMenu)
- ON_UPDATE_COMMAND_UI(ID_OLE_EDIT_CHANGE_ICON, OnUpdateEditChangeIcon)
- ON_COMMAND(ID_OLE_EDIT_CHANGE_ICON, OnEditChangeIcon)
- END_MESSAGE_MAP()
- /////////////////////////////////////////////////////////////////////////////
- // CMainDoc construction/destruction
- CMainDoc::CMainDoc() : m_sizeDoc(800,1050) // document size is 8x10.5
- {
- EnableCompoundFile();
- m_bNeedUpdate = TRUE;
- if (m_cfPrivate == NULL)
- m_cfPrivate = (CLIPFORMAT)
- ::RegisterClipboardFormat(_T("MFC OClient Sample"));
- }
- CMainDoc::~CMainDoc()
- {
- }
- CSize &CMainDoc::GetDocumentSize()
- {
- return m_sizeDoc;
- }
- void CMainDoc::OnShowViews(BOOL bVisible)
- {
- COleLinkingDoc::OnShowViews(bVisible);
- if (bVisible && m_bNeedUpdate)
- {
- // update embedded links in this document before showing the window
- COleUpdateDialog dlg(this);
- dlg.DoModal();
- m_bNeedUpdate = FALSE;
- }
- }
- /////////////////////////////////////////////////////////////////////////////
- // CMainDoc item management
- CRectItem* CMainDoc::CreateItem()
- {
- return new CRectItem(this); // does 'AddItem' automatically
- }
- // safe delete that notifies views
- void CMainDoc::DeleteItem(CRectItem* pItem)
- {
- ASSERT(pItem->GetDocument() == this);
- SetModifiedFlag();
- UpdateAllViews(NULL, 1, pItem); // pItem will be deleted
- pItem->Delete(); // does a 'RemoveItem' & 'delete this' automatically
- }
- /////////////////////////////////////////////////////////////////////////////
- // CMainDoc serialization
- void CMainDoc::Serialize(CArchive& ar)
- {
- // NOTE: New easier to use serialization model -- even for OLE objects!
- WORD wMagic = 0x0DAF;
- if (ar.IsStoring())
- {
- if (HasBlankItems() &&
- AfxMessageBox(IDP_SAVEINCOMPLETE, MB_YESNO|MB_ICONQUESTION) != IDYES)
- {
- TRACE0("Aborting save -- incomplete items found!n");
- AfxThrowArchiveException(CArchiveException::generic);
- }
- ar << wMagic;
- }
- else
- {
- WORD w;
- ar >> w;
- if (w != wMagic)
- {
- TRACE0("invalid magic number at start of filen");
- AfxThrowArchiveException(CArchiveException::generic);
- }
- }
- // serialize the rest of the document (OLE items)
- COleLinkingDoc::Serialize(ar);
- }
- /////////////////////////////////////////////////////////////////////////////
- // CMainDoc commands
- void CMainDoc::OnEditClearAll()
- {
- // delete all items in the document (also removes sub-storages)
- POSITION pos = GetStartPosition();
- while (pos != NULL)
- {
- CRectItem* pItem = (CRectItem*)GetNextItem(pos);
- ASSERT_KINDOF(CRectItem, pItem);
- pItem->Delete();
- }
- // everything is gone now!
- SetModifiedFlag();
- UpdateAllViews(NULL);
- }
- void CMainDoc::OnUpdateEditClearAll(CCmdUI* pCmdUI)
- {
- // Enable ClearAll if there is anything to clear
- pCmdUI->Enable(GetStartPosition() != NULL);
- }
- void CMainDoc::AdjustItemPosition(CRectItem* pItem)
- {
- POSITION pos = GetStartPosition();
- while (pos != NULL)
- {
- CRectItem* pRectItem = (CRectItem*)GetNextItem(pos);
- ASSERT_KINDOF(CRectItem, pItem);
- if (pRectItem != pItem && pRectItem->GetRect() == pItem->GetRect())
- {
- pItem->m_ptPos.x += 10;
- pItem->m_ptPos.y -= 10;
- pos = GetStartPosition();
- }
- }
- }
- /////////////////////////////////////////////////////////////////////////////
- // CMainDoc diagnostics
- #ifdef _DEBUG
- void CMainDoc::AssertValid() const
- {
- COleLinkingDoc::AssertValid();
- }
- void CMainDoc::Dump(CDumpContext& dc) const
- {
- COleLinkingDoc::Dump(dc);
- }
- #endif //_DEBUG