MainFrm.cpp
上传用户:aokegd
上传日期:2009-12-14
资源大小:1276k
文件大小:4k
源码类别:

书籍源码

开发平台:

Visual C++

  1. // MainFrm.cpp : implementation of the CMainFrame class
  2. //
  3. #include "stdafx.h"
  4. #include "BmpMenu.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_DYNCREATE(CMainFrame, CFrameWnd)
  14. BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
  15. //{{AFX_MSG_MAP(CMainFrame)
  16. ON_WM_CREATE()
  17. ON_WM_MEASUREITEM()
  18. ON_WM_MENUCHAR()
  19. ON_WM_INITMENUPOPUP()
  20. //}}AFX_MSG_MAP
  21. END_MESSAGE_MAP()
  22. static UINT indicators[] =
  23. {
  24. ID_SEPARATOR,           // status line indicator
  25. ID_INDICATOR_CAPS,
  26. ID_INDICATOR_NUM,
  27. ID_INDICATOR_SCRL,
  28. };
  29. /////////////////////////////////////////////////////////////////////////////
  30. // CMainFrame construction/destruction
  31. CMainFrame::CMainFrame()
  32. {
  33. // TODO: add member initialization code here
  34. }
  35. CMainFrame::~CMainFrame()
  36. {
  37. }
  38. int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
  39. {
  40. if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
  41. return -1;
  42. if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
  43. | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
  44. !m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
  45. {
  46. TRACE0("Failed to create toolbarn");
  47. return -1;      // fail to create
  48. }
  49. if (!m_wndStatusBar.Create(this) ||
  50. !m_wndStatusBar.SetIndicators(indicators,
  51.   sizeof(indicators)/sizeof(UINT)))
  52. {
  53. TRACE0("Failed to create status barn");
  54. return -1;      // fail to create
  55. }
  56. // TODO: Delete these three lines if you don't want the toolbar to
  57. //  be dockable
  58. m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
  59. EnableDocking(CBRS_ALIGN_ANY);
  60. DockControlBar(&m_wndToolBar);
  61. return 0;
  62. }
  63. BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
  64. {
  65. if( !CFrameWnd::PreCreateWindow(cs) )
  66. return FALSE;
  67. // TODO: Modify the Window class or styles here by modifying
  68. //  the CREATESTRUCT cs
  69. return TRUE;
  70. }
  71. /////////////////////////////////////////////////////////////////////////////
  72. // CMainFrame diagnostics
  73. #ifdef _DEBUG
  74. void CMainFrame::AssertValid() const
  75. {
  76. CFrameWnd::AssertValid();
  77. }
  78. void CMainFrame::Dump(CDumpContext& dc) const
  79. {
  80. CFrameWnd::Dump(dc);
  81. }
  82. #endif //_DEBUG
  83. /////////////////////////////////////////////////////////////////////////////
  84. // CMainFrame message handlers
  85. //生成图标菜单
  86. HMENU CMainFrame::NewMenu()
  87. {
  88. m_menu.LoadMenu(IDR_MAINFRAME);
  89. //将图标加到菜单中
  90. m_menu.ModifyODMenuA(NULL,ID_FILE_NEW,IDB_FILE_NEW);
  91. m_menu.ModifyODMenuA(NULL,ID_FILE_OPEN,IDB_FILE_OPEN);
  92. m_menu.ModifyODMenuA(NULL,ID_FILE_SAVE,IDB_FILE_SAVE);
  93. m_menu.ModifyODMenuA(NULL,ID_FILE_PRINT,IDB_FILE_PRINT);
  94. //返回图标菜单的句柄
  95. return m_menu.Detach();
  96. }
  97. void CMainFrame::OnMeasureItem(int nIDCtl, LPMEASUREITEMSTRUCT lpMeasureItemStruct) 
  98. {
  99. // TODO: Add your message handler code here and/or call default
  100. BOOL setflag=FALSE;
  101. if(lpMeasureItemStruct->CtlType==ODT_MENU){
  102. if(IsMenu((HMENU)lpMeasureItemStruct->itemID)){
  103. CMenu* cmenu = 
  104. CMenu::FromHandle((HMENU)lpMeasureItemStruct->itemID);
  105. if(m_menu.IsMenu(cmenu)){
  106. m_menu.MeasureItem(lpMeasureItemStruct);
  107. setflag=TRUE;
  108. }
  109. }
  110. }
  111.   if(!setflag)CFrameWnd::OnMeasureItem(nIDCtl, 
  112.                                           lpMeasureItemStruct);
  113. // CFrameWnd::OnMeasureItem(nIDCtl, lpMeasureItemStruct);
  114. }
  115. LRESULT CMainFrame::OnMenuChar(UINT nChar, UINT nFlags, CMenu* pMenu) 
  116. {
  117. // TODO: Add your message handler code here and/or call default
  118. LRESULT lresult;
  119. if(m_menu.IsMenu(pMenu))
  120. lresult=BCMenu::FindKeyboardShortcut(nChar, nFlags, pMenu);
  121. else
  122. lresult=CFrameWnd::OnMenuChar(nChar, nFlags, pMenu);
  123. return(lresult);
  124. // return CFrameWnd::OnMenuChar(nChar, nFlags, pMenu);
  125. }
  126. void CMainFrame::OnInitMenuPopup(CMenu* pPopupMenu, UINT nIndex, BOOL bSysMenu) 
  127. {
  128. CFrameWnd::OnInitMenuPopup(pPopupMenu, nIndex, bSysMenu);
  129. if(!bSysMenu){
  130. if(m_menu.IsMenu(pPopupMenu))
  131. BCMenu::UpdateMenu(pPopupMenu);
  132. }
  133. // CFrameWnd::OnInitMenuPopup(pPopupMenu, nIndex, bSysMenu);
  134. // TODO: Add your message handler code here
  135. }