Source code of Windows XP (NT5)
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
// 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 file\n"); 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
|