cntritem.cpp
上传用户:szled88
上传日期:2015-04-09
资源大小:43957k
文件大小:6k
源码类别:

对话框与窗口

开发平台:

Visual C++

  1. // [!output CONTAINER_ITEM_IMPL] : implementation of the [!output CONTAINER_ITEM_CLASS] class
  2. //
  3. #include "stdafx.h"
  4. #include "[!output APP_HEADER]"
  5. [!if OLEDB_RECORD_VIEW || ODBC_RECORD_VIEW]
  6. #include "[!output ROWSET_HEADER]"
  7. [!endif]
  8. #include "[!output DOC_HEADER]"
  9. #include "[!output VIEW_HEADER]"
  10. #include "[!output CONTAINER_ITEM_HEADER]"
  11. #ifdef _DEBUG
  12. #define new DEBUG_NEW
  13. #endif
  14. // [!output CONTAINER_ITEM_CLASS] implementation
  15. IMPLEMENT_SERIAL([!output CONTAINER_ITEM_CLASS], [!output CONTAINER_ITEM_BASE_CLASS], 0)
  16. [!if RICH_EDIT_VIEW]
  17. [!output CONTAINER_ITEM_CLASS]::[!output CONTAINER_ITEM_CLASS](REOBJECT* preo, [!output DOC_CLASS]* pContainer)
  18. : [!output CONTAINER_ITEM_BASE_CLASS](preo, pContainer)
  19. [!else]
  20. [!output CONTAINER_ITEM_CLASS]::[!output CONTAINER_ITEM_CLASS]([!output DOC_CLASS]* pContainer)
  21. : [!output CONTAINER_ITEM_BASE_CLASS](pContainer)
  22. [!endif]
  23. {
  24. // TODO: add one-time construction code here
  25. }
  26. [!output CONTAINER_ITEM_CLASS]::~[!output CONTAINER_ITEM_CLASS]()
  27. {
  28. // TODO: add cleanup code here
  29. }
  30. [!if !RICH_EDIT_VIEW]
  31. void [!output CONTAINER_ITEM_CLASS]::OnChange(OLE_NOTIFICATION nCode, DWORD dwParam)
  32. {
  33. ASSERT_VALID(this);
  34. [!output CONTAINER_ITEM_BASE_CLASS]::OnChange(nCode, dwParam);
  35. // When an item is being edited (either in-place or fully open)
  36. //  it sends OnChange notifications for changes in the state of the
  37. //  item or visual appearance of its content.
  38. // TODO: invalidate the item by calling UpdateAllViews
  39. //  (with hints appropriate to your application)
  40. GetDocument()->UpdateAllViews(NULL);
  41. // for now just update ALL views/no hints
  42. }
  43. BOOL [!output CONTAINER_ITEM_CLASS]::OnChangeItemPosition(const CRect& rectPos)
  44. {
  45. ASSERT_VALID(this);
  46. // During in-place activation [!output CONTAINER_ITEM_CLASS]::OnChangeItemPosition
  47. //  is called by the server to change the position of the in-place
  48. //  window.  Usually, this is a result of the data in the server
  49. //  document changing such that the extent has changed or as a result
  50. //  of in-place resizing.
  51. //
  52. // The default here is to call the base class, which will call
  53. //  [!output CONTAINER_ITEM_BASE_CLASS]::SetItemRects to move the item
  54. //  to the new position.
  55. if (![!output CONTAINER_ITEM_BASE_CLASS]::OnChangeItemPosition(rectPos))
  56. return FALSE;
  57. // TODO: update any cache you may have of the item's rectangle/extent
  58. return TRUE;
  59. }
  60. [!if !ACTIVE_DOC_CONTAINER]
  61. void [!output CONTAINER_ITEM_CLASS]::OnGetItemPosition(CRect& rPosition)
  62. {
  63. ASSERT_VALID(this);
  64. // During in-place activation, [!output CONTAINER_ITEM_CLASS]::OnGetItemPosition
  65. //  will be called to determine the location of this item.  Usually, this
  66. //  rectangle would reflect the current position of the item relative to the
  67. //  view used for activation.  You can obtain the view by calling
  68. //  [!output CONTAINER_ITEM_CLASS]::GetActiveView.
  69. // TODO: return correct rectangle (in pixels) in rPosition
  70. CSize size;
  71. rPosition.SetRectEmpty();
  72. if (SUCCEEDED(GetExtent(&size, m_nDrawAspect)))
  73. {
  74. [!output VIEW_CLASS]* pView = GetActiveView();
  75. ASSERT_VALID(pView);
  76. if (!pView)
  77. return;
  78. CDC *pDC = pView->GetDC();
  79. ASSERT(pDC);
  80. if (!pDC)
  81. return;
  82. pDC->HIMETRICtoLP(&size);
  83. rPosition.SetRect(10, 10, size.cx + 10, size.cy + 10);
  84. }
  85. else
  86. rPosition.SetRect(10, 10, 210, 210);
  87. }
  88. [!endif]
  89. void [!output CONTAINER_ITEM_CLASS]::OnActivate()
  90. {
  91. [!if !ACTIVE_DOC_CONTAINER]
  92. // Allow only one inplace activate item per frame
  93. [!output VIEW_CLASS]* pView = GetActiveView();
  94. ASSERT_VALID(pView);
  95. if (!pView)
  96. return;
  97. COleClientItem* pItem = GetDocument()->GetInPlaceActiveItem(pView);
  98. if (pItem != NULL && pItem != this)
  99. pItem->Close();
  100. [!output CONTAINER_ITEM_BASE_CLASS]::OnActivate();
  101. [!endif]
  102. }
  103. void [!output CONTAINER_ITEM_CLASS]::OnDeactivateUI(BOOL bUndoable)
  104. {
  105. [!output CONTAINER_ITEM_BASE_CLASS]::OnDeactivateUI(bUndoable);
  106. DWORD dwMisc = 0;
  107. m_lpObject->GetMiscStatus(GetDrawAspect(), &dwMisc);
  108. if (dwMisc & OLEMISC_INSIDEOUT)
  109. DoVerb(OLEIVERB_HIDE, NULL);
  110. }
  111. void [!output CONTAINER_ITEM_CLASS]::Serialize(CArchive& ar)
  112. {
  113. ASSERT_VALID(this);
  114. // Call base class first to read in [!output CONTAINER_ITEM_BASE_CLASS] data.
  115. // Since this sets up the m_pDocument pointer returned from
  116. //  [!output CONTAINER_ITEM_CLASS]::GetDocument, it is a good idea to call
  117. //  the base class Serialize first.
  118. [!output CONTAINER_ITEM_BASE_CLASS]::Serialize(ar);
  119. // now store/retrieve data specific to [!output CONTAINER_ITEM_CLASS]
  120. if (ar.IsStoring())
  121. {
  122. // TODO: add storing code here
  123. }
  124. else
  125. {
  126. // TODO: add loading code here
  127. }
  128. }
  129. [!if CONTAINER_SERVER]
  130. BOOL [!output CONTAINER_ITEM_CLASS]::CanActivate()
  131. {
  132. // Editing in-place while the server itself is being edited in-place
  133. //  does not work and is not supported.  So, disable in-place
  134. //  activation in this case.
  135. [!output DOC_CLASS]* pDoc = GetDocument();
  136. ASSERT_VALID(pDoc);
  137. if (!pDoc)
  138. return FALSE;
  139. ASSERT_KINDOF(COleServerDoc, pDoc);
  140. if (!pDoc->IsKindOf(RUNTIME_CLASS(COleServerDoc)))
  141. {
  142. return FALSE;
  143. }
  144. if (pDoc->IsInPlaceActive())
  145. return FALSE;
  146. // otherwise, rely on default behavior
  147. return COleClientItem::CanActivate();
  148. }
  149. [!endif]
  150. [!endif]
  151. // [!output CONTAINER_ITEM_CLASS] diagnostics
  152. #ifdef _DEBUG
  153. void [!output CONTAINER_ITEM_CLASS]::AssertValid() const
  154. {
  155. [!output CONTAINER_ITEM_BASE_CLASS]::AssertValid();
  156. }
  157. void [!output CONTAINER_ITEM_CLASS]::Dump(CDumpContext& dc) const
  158. {
  159. [!output CONTAINER_ITEM_BASE_CLASS]::Dump(dc);
  160. }
  161. #endif