CntrItem.cpp
上传用户:seaboy_04
上传日期:2013-02-24
资源大小:284k
文件大小:4k
源码类别:

其他行业

开发平台:

Visual C++

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