maindoc.cpp
上传用户:biuytresa
上传日期:2007-12-07
资源大小:721k
文件大小:5k
源码类别:

DNA

开发平台:

Visual C++

  1. // maindoc.cpp : implementation of the CMainDoc class
  2. //
  3. // This is a part of the Microsoft Foundation Classes C++ library.
  4. // Copyright (C) 1992-1998 Microsoft Corporation
  5. // All rights reserved.
  6. //
  7. // This source code is only intended as a supplement to the
  8. // Microsoft Foundation Classes Reference and related
  9. // electronic documentation provided with the library.
  10. // See these sources for detailed information regarding the
  11. // Microsoft Foundation Classes product.
  12. #include "stdafx.h"
  13. #include "oclient.h"
  14. #include "maindoc.h"
  15. #include "rectitem.h"
  16. #ifdef _DEBUG
  17. #undef THIS_FILE
  18. static char BASED_CODE THIS_FILE[] = __FILE__;
  19. #endif
  20. // private clipboard format
  21. CLIPFORMAT CMainDoc::m_cfPrivate = NULL;
  22. /////////////////////////////////////////////////////////////////////////////
  23. // CMainDoc
  24. IMPLEMENT_DYNCREATE(CMainDoc, COleLinkingDoc)
  25. BEGIN_MESSAGE_MAP(CMainDoc, COleLinkingDoc)
  26. //{{AFX_MSG_MAP(CMainDoc)
  27. ON_COMMAND(ID_EDIT_CLEAR_ALL, OnEditClearAll)
  28. ON_UPDATE_COMMAND_UI(ID_EDIT_CLEAR_ALL, OnUpdateEditClearAll)
  29. //}}AFX_MSG_MAP
  30. ON_UPDATE_COMMAND_UI(ID_EDIT_PASTE, OnUpdatePasteMenu)
  31. ON_UPDATE_COMMAND_UI(ID_EDIT_PASTE_LINK, OnUpdatePasteLinkMenu)
  32. ON_UPDATE_COMMAND_UI(ID_OLE_EDIT_LINKS, OnUpdateEditLinksMenu)
  33. ON_COMMAND(ID_OLE_EDIT_LINKS, OnEditLinks)
  34. ON_UPDATE_COMMAND_UI(ID_OLE_VERB_FIRST, OnUpdateObjectVerbMenu)
  35. ON_UPDATE_COMMAND_UI(ID_OLE_EDIT_CHANGE_ICON, OnUpdateEditChangeIcon)
  36. ON_COMMAND(ID_OLE_EDIT_CHANGE_ICON, OnEditChangeIcon)
  37. END_MESSAGE_MAP()
  38. /////////////////////////////////////////////////////////////////////////////
  39. // CMainDoc construction/destruction
  40. CMainDoc::CMainDoc() : m_sizeDoc(800,1050) // document size is 8x10.5
  41. {
  42. EnableCompoundFile();
  43. m_bNeedUpdate = TRUE;
  44. if (m_cfPrivate == NULL)
  45. m_cfPrivate = (CLIPFORMAT)
  46. ::RegisterClipboardFormat(_T("MFC OClient Sample"));
  47. }
  48. CMainDoc::~CMainDoc()
  49. {
  50. }
  51. CSize &CMainDoc::GetDocumentSize()
  52. {
  53. return m_sizeDoc;
  54. }
  55. void CMainDoc::OnShowViews(BOOL bVisible)
  56. {
  57. COleLinkingDoc::OnShowViews(bVisible);
  58. if (bVisible && m_bNeedUpdate)
  59. {
  60. // update embedded links in this document before showing the window
  61. COleUpdateDialog dlg(this);
  62. dlg.DoModal();
  63. m_bNeedUpdate = FALSE;
  64. }
  65. }
  66. /////////////////////////////////////////////////////////////////////////////
  67. // CMainDoc item management
  68. CRectItem* CMainDoc::CreateItem()
  69. {
  70. return new CRectItem(this); // does 'AddItem' automatically
  71. }
  72. // safe delete that notifies views
  73. void CMainDoc::DeleteItem(CRectItem* pItem)
  74. {
  75. ASSERT(pItem->GetDocument() == this);
  76. SetModifiedFlag();
  77. UpdateAllViews(NULL, 1, pItem); // pItem will be deleted
  78. pItem->Delete();    // does a 'RemoveItem' & 'delete this' automatically
  79. }
  80. /////////////////////////////////////////////////////////////////////////////
  81. // CMainDoc serialization
  82. void CMainDoc::Serialize(CArchive& ar)
  83. {
  84. // NOTE: New easier to use serialization model -- even for OLE objects!
  85. WORD wMagic = 0x0DAF;
  86. if (ar.IsStoring())
  87. {
  88. if (HasBlankItems() &&
  89. AfxMessageBox(IDP_SAVEINCOMPLETE, MB_YESNO|MB_ICONQUESTION) != IDYES)
  90. {
  91. TRACE0("Aborting save -- incomplete items found!n");
  92. AfxThrowArchiveException(CArchiveException::generic);
  93. }
  94. ar << wMagic;
  95. }
  96. else
  97. {
  98. WORD w;
  99. ar >> w;
  100. if (w != wMagic)
  101. {
  102. TRACE0("invalid magic number at start of filen");
  103. AfxThrowArchiveException(CArchiveException::generic);
  104. }
  105. }
  106. // serialize the rest of the document (OLE items)
  107. COleLinkingDoc::Serialize(ar);
  108. }
  109. /////////////////////////////////////////////////////////////////////////////
  110. // CMainDoc commands
  111. void CMainDoc::OnEditClearAll()
  112. {
  113. // delete all items in the document (also removes sub-storages)
  114. POSITION pos = GetStartPosition();
  115. while (pos != NULL)
  116. {
  117. CRectItem* pItem = (CRectItem*)GetNextItem(pos);
  118. ASSERT_KINDOF(CRectItem, pItem);
  119. pItem->Delete();
  120. }
  121. // everything is gone now!
  122. SetModifiedFlag();
  123. UpdateAllViews(NULL);
  124. }
  125. void CMainDoc::OnUpdateEditClearAll(CCmdUI* pCmdUI)
  126. {
  127. // Enable ClearAll if there is anything to clear
  128. pCmdUI->Enable(GetStartPosition() != NULL);
  129. }
  130. void CMainDoc::AdjustItemPosition(CRectItem* pItem)
  131. {
  132. POSITION pos = GetStartPosition();
  133. while (pos != NULL)
  134. {
  135. CRectItem* pRectItem = (CRectItem*)GetNextItem(pos);
  136. ASSERT_KINDOF(CRectItem, pItem);
  137. if (pRectItem != pItem && pRectItem->GetRect() == pItem->GetRect())
  138. {
  139. pItem->m_ptPos.x += 10;
  140. pItem->m_ptPos.y -= 10;
  141. pos = GetStartPosition();
  142. }
  143. }
  144. }
  145. /////////////////////////////////////////////////////////////////////////////
  146. // CMainDoc diagnostics
  147. #ifdef _DEBUG
  148. void CMainDoc::AssertValid() const
  149. {
  150. COleLinkingDoc::AssertValid();
  151. }
  152. void CMainDoc::Dump(CDumpContext& dc) const
  153. {
  154. COleLinkingDoc::Dump(dc);
  155. }
  156. #endif //_DEBUG