CNTRITEM.CPP
上传用户:bangxh
上传日期:2007-01-31
资源大小:42235k
文件大小:4k
源码类别:

Windows编程

开发平台:

Visual C++

  1. // CntrItem.cpp : implementation of the CContainerItem class
  2. //
  3. #include "stdafx.h"
  4. #include "Contain.h"
  5. #include "ContrDoc.h"
  6. #include "CntrItem.h"
  7. #include "ContrVw.h"
  8. #ifdef _DEBUG
  9. #define new DEBUG_NEW
  10. #undef THIS_FILE
  11. static char THIS_FILE[] = __FILE__;
  12. #endif
  13. /////////////////////////////////////////////////////////////////////////////
  14. // CContainerItem implementation
  15. IMPLEMENT_SERIAL(CContainerItem, COleClientItem, 0)
  16. CContainerItem::CContainerItem(CContainerDoc* pContainer)
  17. : COleClientItem(pContainer)
  18. {
  19. // TODO: add one-time construction code here
  20. m_rect.SetRect(10, 10, 50, 50);
  21. }
  22. CContainerItem::~CContainerItem()
  23. {
  24. // TODO: add cleanup code here
  25. }
  26. void CContainerItem::OnChange(OLE_NOTIFICATION nCode, DWORD dwParam)
  27. {
  28. ASSERT_VALID(this);
  29. COleClientItem::OnChange(nCode, dwParam);
  30. // When an item is being edited (either in-place or fully open)
  31. //  it sends OnChange notifications for changes in the state of the
  32. //  item or visual appearance of its content.
  33. // TODO: invalidate the item by calling UpdateAllViews
  34. //  (with hints appropriate to your application)
  35. GetDocument()->UpdateAllViews(NULL);
  36. // for now just update ALL views/no hints
  37. }
  38. BOOL CContainerItem::OnChangeItemPosition(const CRect& rectPos)
  39. {
  40. ASSERT_VALID(this);
  41. // During in-place activation CContainerItem::OnChangeItemPosition
  42. //  is called by the server to change the position of the in-place
  43. //  window.  Usually, this is a result of the data in the server
  44. //  document changing such that the extent has changed or as a result
  45. //  of in-place resizing.
  46. //
  47. // The default here is to call the base class, which will call
  48. //  COleClientItem::SetItemRects to move the item
  49. //  to the new position.
  50. if (!COleClientItem::OnChangeItemPosition(rectPos))
  51. return FALSE;
  52. GetDocument()->UpdateAllViews(NULL);
  53. m_rect = rectPos;
  54. // mark document as dirty
  55. GetDocument()->SetModifiedFlag();
  56. return TRUE;
  57. }
  58. void CContainerItem::OnGetItemPosition(CRect& rPosition)
  59. {
  60. ASSERT_VALID(this);
  61. // return rect relative to client area of view
  62. rPosition = m_rect;
  63. }
  64. void CContainerItem::OnActivate()
  65. {
  66. // allow only one inplace active item per frame
  67. CView* pView = GetActiveView();
  68. ASSERT_VALID(pView);
  69. COleClientItem* pItem = GetDocument()->GetInPlaceActiveItem(pView);
  70. if (pItem != NULL && pItem != this)
  71. pItem->Close();
  72. COleClientItem::OnActivate();
  73. }
  74. void CContainerItem::OnDeactivateUI(BOOL bUndoable)
  75. {
  76. COleClientItem::OnDeactivateUI(bUndoable);
  77. // hide the object if it is not an outside-in object
  78. DWORD dwMisc = 0;
  79. m_lpObject->GetMiscStatus(GetDrawAspect(), &dwMisc);
  80. if (dwMisc & OLEMISC_INSIDEOUT)
  81. DoVerb(OLEIVERB_HIDE, NULL);
  82. }
  83. void CContainerItem::Serialize(CArchive& ar)
  84. {
  85. ASSERT_VALID(this);
  86. // Call base class first to read in COleClientItem data.
  87. // Since this sets up the m_pDocument pointer returned from
  88. //  CContainerItem::GetDocument, it is a good idea to call
  89. //  the base class Serialize first.
  90. COleClientItem::Serialize(ar);
  91. // now store/retrieve data specific to CContainerItem
  92. if (ar.IsStoring())
  93. {
  94. // TODO: add storing code here
  95. ar << m_rect;
  96. }
  97. else
  98. {
  99. // TODO: add loading code here
  100. ar >> m_rect;
  101. }
  102. }
  103. /////////////////////////////////////////////////////////////////////////////
  104. // CContainerItem diagnostics
  105. #ifdef _DEBUG
  106. void CContainerItem::AssertValid() const
  107. {
  108. COleClientItem::AssertValid();
  109. }
  110. void CContainerItem::Dump(CDumpContext& dc) const
  111. {
  112. COleClientItem::Dump(dc);
  113. }
  114. #endif
  115. /////////////////////////////////////////////////////////////////////////////