MainFrm.cpp
上传用户:hbytzg
上传日期:2007-01-02
资源大小:47k
文件大小:6k
源码类别:

midi

开发平台:

Visual C++

  1. // MainFrm.cpp : implementation of the CMainFrame class
  2. //
  3. #include "stdafx.h"
  4. #include "SwitchTB.h"
  5. #include "MainFrm.h"
  6. #ifdef _DEBUG
  7. #define new DEBUG_NEW
  8. #undef THIS_FILE
  9. static char THIS_FILE[] = __FILE__;
  10. #endif
  11. /////////////////////////////////////////////////////////////////////////////
  12. // CMainFrame
  13. IMPLEMENT_DYNAMIC(CMainFrame, CMDIFrameWnd)
  14. BEGIN_MESSAGE_MAP(CMainFrame, CMDIFrameWnd)
  15. //{{AFX_MSG_MAP(CMainFrame)
  16. // NOTE - the ClassWizard will add and remove mapping macros here.
  17. //    DO NOT EDIT what you see in these blocks of generated code !
  18. ON_WM_CREATE()
  19. //}}AFX_MSG_MAP
  20. END_MESSAGE_MAP()
  21. static UINT indicators[] =
  22. {
  23. ID_SEPARATOR,           // status line indicator
  24. ID_INDICATOR_CAPS,
  25. ID_INDICATOR_NUM,
  26. ID_INDICATOR_SCRL,
  27. };
  28. /////////////////////////////////////////////////////////////////////////////
  29. // CMainFrame construction/destruction
  30. CMainFrame::CMainFrame()
  31. {
  32. }
  33. CMainFrame::~CMainFrame()
  34. {
  35. CToolBar *pTB;
  36. int n;
  37. for (n=0 ; n < m_vToolbars.GetSize () ; n++) {
  38. pTB = m_vToolbars.GetAt (n);
  39. if (pTB)
  40. delete pTB;
  41. }
  42. }
  43. int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
  44. {
  45. if (CMDIFrameWnd::OnCreate(lpCreateStruct) == -1)
  46. return -1;
  47. m_wndClient.SubclassWindow (m_hWndMDIClient);
  48. if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
  49. | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
  50. !m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
  51. {
  52. TRACE0("Failed to create toolbarn");
  53. return -1;      // fail to create
  54. }
  55. if (!m_wndStatusBar.Create(this) ||
  56. !m_wndStatusBar.SetIndicators(indicators,
  57.   sizeof(indicators)/sizeof(UINT)))
  58. {
  59. TRACE0("Failed to create status barn");
  60. return -1;      // fail to create
  61. }
  62. // TODO: Delete these three lines if you don't want the toolbar to
  63. //  be dockable
  64. m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
  65. EnableDocking(CBRS_ALIGN_ANY);
  66. DockControlBar(&m_wndToolBar);
  67. return 0;
  68. }
  69. /////////////////////////////////////////////////////////////////////////////
  70. // CMainFrame diagnostics
  71. #ifdef _DEBUG
  72. void CMainFrame::AssertValid() const
  73. {
  74. CMDIFrameWnd::AssertValid();
  75. }
  76. void CMainFrame::Dump(CDumpContext& dc) const
  77. {
  78. CMDIFrameWnd::Dump(dc);
  79. }
  80. #endif //_DEBUG
  81. /////////////////////////////////////////////////////////////////////////////
  82. // CMainFrame message handlers
  83. #include "DocTemplateEx.h"
  84. void CMainFrame::SwitchToolbar ()
  85. {
  86. /***************************************************************
  87. | This function retrive the resource ID from the current view. |
  88. | Then it calls 'SetToolbar' to activate the specified toolbar |
  89. | and to disactivets all the others. |
  90. | If no view is open the resource ID, 'idResource', is set to 0 |
  91. | and all toolbars are disactivated. |
  92. | External functions used: |
  93. | IsWindow (CWnd *pWnd) |
  94. ***************************************************************/
  95. CView *pView;
  96. CDocTemplateEx *pTmpl;
  97. CMDIChildWnd *pKid;
  98. int idResource = 0; // initialize incase no resource is found
  99. pKid = MDIGetActive ();
  100. if (::IsWindow (pKid)) {
  101. pView = pKid->GetActiveView ();
  102. if (::IsWindow (pView)) {
  103. pTmpl = (CDocTemplateEx *) pView->GetDocument ()->GetDocTemplate ();
  104. idResource = pTmpl->GetResourceID ();
  105. }
  106. }
  107. SetToolbar (idResource);
  108. }
  109. void CMainFrame::SetToolbar (int nIdr)
  110. /***************************************************************
  111. | This function gets the toolbar index to the toolbars array, |
  112. | 'm_vToolbars'. The it loops over all the toolbars. If the |
  113. | toolbar the one to be displayed it is closed. |
  114. | External functions used: |
  115. | ShowControlBar |
  116. | RecalcLayout |
  117. ***************************************************************/
  118. {
  119. static int nToolbars;
  120. int n, nIdx;
  121. CString str;
  122. CToolBar *pTB;
  123. str.Format ("Toolbar #%d", ++nToolbars);
  124. nIdx = AddToolbar (nIdr, str);
  125. for (n=0 ; n < m_vToolbars.GetSize () ; n++) {
  126. pTB = m_vToolbars.GetAt (n);
  127. if (n != nIdx) {
  128. ShowControlBar (pTB, 0, 0);
  129. }
  130. else
  131. ShowControlBar (pTB, 1, 1);
  132. }
  133. m_wndToolBar.GetParentFrame()->RecalcLayout();
  134. }
  135. int CMainFrame::AddToolbar (int nIDR, CString strWndTxt)
  136. /***************************************************************
  137. | This function returns the index of the toolbar, that have the |
  138. | ID of 'nIDR', in the toolbar array, 'm_vToolbars'. |
  139. | If the ID does not exist in the loaded ID array, 'm_idrLoaded'|
  140. | the function creates a new toolbar, ads the toolbar pointer |
  141. | to the toolbar array and the ID to the loaded toolbar IDs |
  142. | array. |
  143. | The function also docks the toolbar left to the mainframe |
  144. | toolbar. |
  145. | External functions used: |
  146. | ShowControlBar |
  147. | FindInArray |
  148. ***************************************************************/
  149. {
  150. CToolBar *pTB;
  151. BOOL f;
  152. CRect rc;
  153. int nIdx;
  154. if (nIDR == 0)
  155. return (-1);
  156. if ((nIdx = ::FindInArray (m_idrLoaded, nIDR)) < 0) {
  157. pTB = new CToolBar;
  158. pTB->Create (this);
  159. f = pTB->LoadToolBar (nIDR);
  160. if (f == 0) {
  161. pTB->DestroyWindow ();
  162. delete pTB;
  163. return (-1);
  164. }
  165. pTB->SetBarStyle(m_wndToolBar.GetBarStyle() |
  166. CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC);
  167. pTB->EnableDocking(CBRS_ALIGN_TOP);
  168. m_wndToolBar.GetWindowRect (&rc);
  169. rc.OffsetRect(1,0);
  170. DockControlBar(pTB, AFX_IDW_DOCKBAR_TOP, &rc);
  171. pTB->SetWindowText (strWndTxt);
  172. pTB->ShowWindow (SW_RESTORE);
  173. ShowControlBar (pTB, 1, 1);
  174. nIdx = m_vToolbars.Add (pTB);
  175. m_idrLoaded.Add (nIDR);
  176. }
  177. return (nIdx);
  178. }