GuiMDIFrame.cpp
上传用户:zhanglf88
上传日期:2013-11-19
资源大小:6036k
文件大小:8k
源码类别:

金融证券系统

开发平台:

Visual C++

  1. //-----------------------------------------------------------------------//
  2. // This is a part of the GuiLib MFC Extention.  //
  3. // Autor  :  Francisco Campos  //
  4. // (C) 2002 Francisco Campos <www.beyondata.com> All rights reserved     //
  5. // This code is provided "as is", with absolutely no warranty expressed  //
  6. // or implied. Any use is at your own risk.  //
  7. // You must obtain the author's consent before you can include this code //
  8. // in a software library.  //
  9. // If the source code in  this file is used in any application  //
  10. // then acknowledgement must be made to the author of this program  //
  11. // fcampos@tutopia.com  //
  12. //-----------------------------------------------------------------------//
  13. #include "stdafx.h"
  14. #include "GuiMDIFrame.h"
  15. #ifdef _DEBUG
  16. #define new DEBUG_NEW
  17. #undef THIS_FILE
  18. static char THIS_FILE[] = __FILE__;
  19. #endif
  20. /////////////////////////////////////////////////////////////////////////////
  21. // CGuiMDIFrame
  22. IMPLEMENT_DYNCREATE(CGuiMDIFrame, CMDIFrameWnd)
  23. CGuiMDIFrame::CGuiMDIFrame()
  24. {
  25. }
  26. CGuiMDIFrame::~CGuiMDIFrame()
  27. {
  28. }
  29. BEGIN_MESSAGE_MAP(CGuiMDIFrame, CMDIFrameWnd)
  30. //{{AFX_MSG_MAP(CGuiMDIFrame)
  31. // NOTE - the ClassWizard will add and remove mapping macros here.
  32. //}}AFX_MSG_MAP
  33. END_MESSAGE_MAP()
  34. //**************************************************************************
  35. /*
  36. */
  37. BOOL CGuiMDIFrame::PreCreateWindow(CREATESTRUCT& cs)
  38. {
  39. return CMDIFrameWnd::PreCreateWindow(cs);
  40. }
  41. BOOL CGuiMDIFrame::InitMDITabbed()
  42. {
  43. if(::IsWindow(m_MdiTabbed.GetSafeHwnd())) return TRUE;
  44. if (!m_MdiTabbed.Create(WS_VISIBLE|WS_CHILD,CRect(0,0,0,0),this,0x333))
  45. return FALSE;
  46. if (::IsWindow(m_wndMenuBar.GetSafeHwnd())) m_wndMenuBar.SetTabbed(TRUE);
  47. return TRUE;
  48. }
  49. //*************************************************************************
  50. BOOL CGuiMDIFrame::PreCreateWindow(CREATESTRUCT& cs, UINT nIconID)
  51. {
  52. cs.lpszClass = AfxRegisterWndClass( 0, NULL, NULL,
  53. AfxGetApp()->LoadIcon(nIconID));
  54. ASSERT(cs.lpszClass);
  55. return CMDIFrameWnd::PreCreateWindow(cs);
  56. }
  57. //*************************************************************************
  58. void CGuiMDIFrame::ShowHideBar(CGuiControlBar* pBar)
  59. {
  60. if (pBar->IsWindowVisible())
  61. ShowControlBar(pBar, FALSE, FALSE);
  62. else
  63. ShowControlBar(pBar, TRUE, FALSE);
  64. }
  65. void CGuiMDIFrame::ShowHideBar(CControlBar* pBar)
  66. {
  67. if (pBar->IsWindowVisible())
  68. ShowControlBar(pBar, FALSE, FALSE);
  69. else
  70. ShowControlBar(pBar, TRUE, FALSE);
  71. }
  72. //*************************************************************************
  73. void CGuiMDIFrame::EnableDocking(DWORD dwDockStyle)
  74. {
  75. ASSERT((dwDockStyle & ~ (CBRS_ALIGN_ANY | CBRS_FLOAT_MULTI)) == 0);
  76. m_pFloatingFrameClass = RUNTIME_CLASS(CMiniDockFrameWnd);
  77. CGuiDocBarExten* pDock;
  78. DWORD dwStyle = WS_CHILD| WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN;
  79. DWORD dwstyle;
  80. pDock = new CGuiDocBarExten();
  81. pDock->Create(this,dwStyle|CBRS_TOP, AFX_IDW_DOCKBAR_TOP);
  82. dwstyle = pDock->GetBarStyle();
  83. dwstyle &= ~CBRS_BORDER_ANY;
  84. pDock->SetBarStyle(dwstyle);
  85. pDock = new CGuiDocBarExten();
  86. pDock->Create(this, dwStyle|CBRS_BOTTOM, AFX_IDW_DOCKBAR_BOTTOM);
  87. dwstyle = pDock->GetBarStyle();
  88. dwstyle &= ~CBRS_BORDER_ANY;
  89. pDock->SetBarStyle(dwstyle);
  90. pDock = new CGuiDocBarExten();
  91. pDock->Create(this,dwStyle|CBRS_LEFT, AFX_IDW_DOCKBAR_LEFT);
  92. dwstyle = pDock->GetBarStyle();
  93. dwstyle &= ~CBRS_BORDER_ANY;
  94. pDock->SetBarStyle(dwstyle);
  95. pDock = new CGuiDocBarExten();
  96. pDock->Create(this,dwStyle|CBRS_RIGHT, AFX_IDW_DOCKBAR_RIGHT);
  97. dwstyle = pDock->GetBarStyle();
  98. dwstyle &= ~CBRS_BORDER_ANY;
  99. pDock->SetBarStyle(dwstyle);
  100. // DockSpecialBars();
  101. }
  102. DWORD CGuiMDIFrame::CanDock(CRect rect, DWORD dwDockStyle, CDockBar** ppDockBar)
  103. {
  104. // dwDockStyle -- allowable styles of bar
  105. // don't allow to dock to floating unless multi is specified
  106. dwDockStyle &= CBRS_ALIGN_ANY|CBRS_FLOAT_MULTI;
  107. if (ppDockBar != NULL)
  108. *ppDockBar = NULL;
  109. POSITION pos = m_listControlBars.GetHeadPosition();
  110. while (pos != NULL)
  111. {
  112. CDockBar* pDockBar = (CDockBar*)m_listControlBars.GetNext(pos);
  113. if (pDockBar->IsDockBar() && pDockBar->IsWindowVisible() &&
  114. (pDockBar->m_dwStyle & dwDockStyle & CBRS_ALIGN_ANY) &&
  115. (!pDockBar->m_bFloating ||
  116. (dwDockStyle & pDockBar->m_dwStyle & CBRS_FLOAT_MULTI)))
  117. {
  118. CRect rectBar;
  119. pDockBar->GetWindowRect(&rectBar);
  120. if (rectBar.Width() == 0)
  121. rectBar.right++;
  122. if (rectBar.Height() == 0)
  123. rectBar.bottom++;
  124. if (rectBar.IntersectRect(rectBar, rect))
  125. {
  126. if (ppDockBar != NULL)
  127. *ppDockBar = pDockBar;
  128. return pDockBar->m_dwStyle & dwDockStyle;
  129. }
  130. }
  131. }
  132. return 0;
  133. }
  134. void CGuiMDIFrame::DockSpecialBars()
  135. {
  136. m_dockToolbarTop.Create(this,CBRS_ALIGN_BOTTOM);
  137. m_dockToolbarBottom.Create(this,CBRS_ALIGN_TOP);
  138. m_dockToolbarLeft.Create(this,CBRS_ALIGN_LEFT);
  139. m_dockToolbarRight.Create(this,CBRS_ALIGN_RIGHT);
  140. /* m_dockToolbarTop.EnableDocking(CBRS_ALIGN_TOP);
  141. m_dockToolbarBottom.EnableDocking(CBRS_ALIGN_BOTTOM);
  142. m_dockToolbarLeft.EnableDocking(CBRS_ALIGN_LEFT);
  143. m_dockToolbarRight.EnableDocking(CBRS_ALIGN_RIGHT);
  144. DockControlBar(&m_dockToolbarTop);
  145. DockControlBar(&m_dockToolbarBottom);
  146. DockControlBar(&m_dockToolbarLeft);
  147. DockControlBar(&m_dockToolbarRight);*/
  148. }
  149. /////////////////////////////////////////////////////////////////////////////
  150. // CGuiMDIFrame message handlers
  151. //***********************************************************************
  152. BOOL CGuiMDIFrame::DestroyWindow()
  153. {
  154. SaveBarState(sProfile);
  155. return CFrameWnd::DestroyWindow();
  156. }
  157. //***********************************************************************
  158. BOOL CGuiMDIFrame::VerifyBarState(LPCTSTR lpszProfileName)
  159. {
  160.     CDockState state;
  161.     state.LoadState(lpszProfileName);
  162.     for (int i = 0; i < state.m_arrBarInfo.GetSize(); i++)
  163.     {
  164.         CControlBarInfo* pInfo = (CControlBarInfo*)state.m_arrBarInfo[i];
  165.         ASSERT(pInfo != NULL);
  166.         int nDockedCount = pInfo->m_arrBarID.GetSize();
  167.         if (nDockedCount > 0)
  168.         {
  169.             // dockbar
  170.             for (int j = 0; j < nDockedCount; j++)
  171.             {
  172.                 UINT nID = (UINT) pInfo->m_arrBarID[j];
  173.                 if (nID == 0) continue; // row separator
  174.                 if (nID > 0xFFFF)
  175.                     nID &= 0xFFFF; // placeholder - get the ID
  176.                 if (GetControlBar(nID) == NULL)
  177.                     return FALSE;
  178.             }
  179.         }
  180.         if (!pInfo->m_bFloating) // floating dockbars can be created later
  181.             if (GetControlBar(pInfo->m_nBarID) == NULL)
  182.                 return FALSE; // invalid bar ID
  183.     }
  184.     return TRUE;
  185. }
  186. void CGuiMDIFrame::LoadBars()
  187. {
  188. if (VerifyBarState(sProfile))
  189. {
  190. LoadBarState(sProfile);
  191. }
  192. }
  193. void CGuiMDIFrame::OnUpdateFrameTitle(BOOL bAddToTitle)
  194. {
  195. // TODO: Add your specialized code here and/or call the base class
  196. CMDIFrameWnd::OnUpdateFrameTitle(bAddToTitle);
  197. if(::IsWindow(m_MdiTabbed.GetSafeHwnd()))
  198. m_MdiTabbed.UpdateWindows();
  199. }
  200. int CGuiMDIFrame::InitMenu(UINT uIDMenu)
  201. {
  202. if (!m_wndMenuBar.CreateEx(this, WS_CHILD | WS_VISIBLE | CBRS_TOP
  203. | CBRS_GRIPPER | CBRS_SIZE_DYNAMIC ) ||
  204. !m_wndMenuBar.LoadMenuBar(uIDMenu))
  205. {
  206. TRACE0("Failed to create menubarn");
  207. return -1;      // fail to create
  208. }
  209. m_NewMenu.LoadMenu(uIDMenu);
  210. m_wndCool.Install(this);
  211. m_wndCool.LoadToolbar(uIDMenu);
  212. return 0;
  213. }
  214. //int CGuiMDIFrame::InitMenu(UINT uIDMenu)
  215. int CGuiMDIFrame::InitStatusBar(UINT *indicators,int nSize)
  216. {
  217. if (!m_wndStatusBar.Create(this) ||
  218. !m_wndStatusBar.SetIndicators(indicators,
  219.   nSize))
  220. {
  221. TRACE0("Failed to create status barn");
  222. return -1;      // fail to create
  223. }
  224. return 0;
  225. }
  226. int CGuiMDIFrame::InitToolBar(UINT uIDMenu)
  227. {
  228. if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
  229. | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC,CRect(0,0,0,0),uIDMenu) ||
  230. !m_wndToolBar.LoadToolBar(uIDMenu))
  231. {
  232. TRACE0("Failed to create toolbarn");
  233. return -1;      // fail to create
  234. }
  235. return 0;
  236. }