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

对话框与窗口

开发平台:

Visual C++

  1. // CntrItem.cpp : implementation of the CRibbonSampleCntrItem class
  2. //
  3. #include "stdafx.h"
  4. #include "RibbonSample.h"
  5. #include "RibbonSampleDoc.h"
  6. #include "RibbonSampleView.h"
  7. #include "CntrItem.h"
  8. #include "MainFrm.h"
  9. #ifdef _DEBUG
  10. #define new DEBUG_NEW
  11. #undef THIS_FILE
  12. static char THIS_FILE[] = __FILE__;
  13. #endif
  14. /////////////////////////////////////////////////////////////////////////////
  15. // CRibbonSampleCntrItem implementation
  16. IMPLEMENT_SERIAL(CRibbonSampleCntrItem, CRichEditCntrItem, 0)
  17. CRibbonSampleCntrItem::CRibbonSampleCntrItem(REOBJECT* preo, CRibbonSampleDoc* pContainer)
  18. : CRichEditCntrItem(preo, pContainer)
  19. {
  20. // TODO: add one-time construction code here
  21. }
  22. CRibbonSampleCntrItem::~CRibbonSampleCntrItem()
  23. {
  24. // TODO: add cleanup code here
  25. }
  26. /////////////////////////////////////////////////////////////////////////////
  27. // CRibbonSampleCntrItem diagnostics
  28. #ifdef _DEBUG
  29. void CRibbonSampleCntrItem::AssertValid() const
  30. {
  31. CRichEditCntrItem::AssertValid();
  32. }
  33. void CRibbonSampleCntrItem::Dump(CDumpContext& dc) const
  34. {
  35. CRichEditCntrItem::Dump(dc);
  36. }
  37. #endif
  38. /////////////////////////////////////////////////////////////////////////////
  39. void CRibbonSampleCntrItem::ActiveStateChanged(BOOL bActive)
  40. {
  41. CMainFrame* pFrame = DYNAMIC_DOWNCAST(CMainFrame, AfxGetMainWnd());
  42. if (!pFrame)
  43. return;
  44. CXTPRibbonBar* pRibbonBar = (CXTPRibbonBar*)pFrame->GetCommandBars()->GetMenuBar();
  45. ASSERT(pRibbonBar);
  46. if (!pRibbonBar)
  47. return;
  48. pFrame->GetCommandBars()->OnSetPreviewMode(bActive);
  49. if (bActive)
  50. {
  51. pRibbonBar->EnableFrameTheme(FALSE);
  52. CDocTemplate* pTemplate = GetDocument()->GetDocTemplate();
  53. HMENU hMenuOLE = pTemplate->m_hMenuInPlace;
  54. ::SetMenu(pFrame->GetSafeHwnd(), hMenuOLE);
  55. }
  56. else
  57. {
  58. pRibbonBar->EnableFrameTheme(TRUE);
  59. }
  60. pFrame->DelayRecalcLayout(FALSE);
  61. }
  62. void CRibbonSampleCntrItem::OnActivate()
  63. {
  64. // allow only one inplace active item per frame
  65. CView* pView = GetActiveView();
  66. ASSERT_VALID(pView);
  67. COleClientItem* pItem = GetDocument()->GetInPlaceActiveItem(pView);
  68. if (pItem != NULL && pItem != this)
  69. pItem->Close();
  70. ActiveStateChanged(TRUE);
  71. COleClientItem::OnActivate();
  72. }
  73. void CRibbonSampleCntrItem::OnDeactivateUI(BOOL bUndoable)
  74. {
  75. COleClientItem::OnDeactivateUI(bUndoable);
  76. // hide the object if it is not an outside-in object
  77. DWORD dwMisc = 0;
  78. m_lpObject->GetMiscStatus(GetDrawAspect(), &dwMisc);
  79. if (dwMisc & OLEMISC_INSIDEOUT)
  80. DoVerb(OLEIVERB_HIDE, NULL);
  81. ActiveStateChanged(FALSE);
  82. }