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

菜单

开发平台:

Visual C++

  1. // MainFrm.cpp : implementation of the CMainFrame class
  2. //
  3. #include "stdafx.h"
  4. #include "mymenu.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. int Undocheck=0;
  12. /////////////////////////////////////////////////////////////////////////////
  13. // CMainFrame
  14. IMPLEMENT_DYNAMIC(CMainFrame, CMDIFrameWnd)
  15. BEGIN_MESSAGE_MAP(CMainFrame, CMDIFrameWnd)
  16. //{{AFX_MSG_MAP(CMainFrame)
  17. ON_WM_CREATE()
  18. ON_COMMAND(ID_ZOOM, OnZoom)
  19. ON_COMMAND(ID_EDIT_UNDO, OnEditUndo)
  20. ON_UPDATE_COMMAND_UI(ID_EDIT_UNDO, OnUpdateEditUndo)
  21. ON_WM_MEASUREITEM()
  22. ON_WM_MENUCHAR()
  23. ON_COMMAND(ID_EDIT_COPY, OnEditCopy)
  24. ON_COMMAND(ID_EDIT_CUT, OnEditCut)
  25. ON_COMMAND(ID_EDIT_PASTE, OnEditPaste)
  26. ON_UPDATE_COMMAND_UI(ID_ZOOM, OnUpdateZoom)
  27. ON_COMMAND(ID_DEFAULT, OnDefault)
  28. ON_UPDATE_COMMAND_UI(ID_DEFAULT, OnUpdateDefault)
  29. ON_WM_INITMENUPOPUP()
  30. ON_COMMAND(ID_HOMEPAGE, OnHomepage)
  31. ON_COMMAND(ID_WINDOW_TILE, OnWindowTile)
  32. ON_COMMAND(ID_ENABLE, OnEnable)
  33. ON_UPDATE_COMMAND_UI(ID_ENABLE, OnUpdateEnable)
  34. ON_COMMAND(ID_DISABLE, OnDisable)
  35. ON_UPDATE_COMMAND_UI(ID_DISABLE, OnUpdateDisable)
  36. //}}AFX_MSG_MAP
  37. END_MESSAGE_MAP()
  38. static UINT indicators[] =
  39. {
  40. ID_SEPARATOR,           // status line indicator
  41. ID_INDICATOR_CAPS,
  42. ID_INDICATOR_NUM,
  43. ID_INDICATOR_SCRL,
  44. };
  45. /////////////////////////////////////////////////////////////////////////////
  46. // CMainFrame construction/destruction
  47. CMainFrame::CMainFrame()
  48. {
  49. // TODO: add member initialization code here
  50. zoomcheck=TRUE;
  51.   disable_flag=FALSE;
  52. }
  53. CMainFrame::~CMainFrame()
  54. {
  55. }
  56. int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
  57. {
  58. if (CMDIFrameWnd::OnCreate(lpCreateStruct) == -1)
  59. return -1;
  60. if (!m_wndToolBar.Create(this) ||
  61. !m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
  62. {
  63. TRACE0("Failed to create toolbarn");
  64. return -1;      // fail to create
  65. }
  66. if (!m_wndStatusBar.Create(this) ||
  67. !m_wndStatusBar.SetIndicators(indicators,
  68.   sizeof(indicators)/sizeof(UINT)))
  69. {
  70. TRACE0("Failed to create status barn");
  71. return -1;      // fail to create
  72. }
  73. // TODO: Remove this if you don't want tool tips or a resizeable toolbar
  74. m_wndToolBar.SetBarStyle(m_wndToolBar.GetBarStyle() |
  75. CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC);
  76. // TODO: Delete these three lines if you don't want the toolbar to
  77. //  be dockable
  78. m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
  79. EnableDocking(CBRS_ALIGN_ANY);
  80. DockControlBar(&m_wndToolBar);
  81.   CMenu *pSystemMenu=GetSystemMenu(FALSE);
  82.   pSystemMenu->AppendMenu(MF_SEPARATOR);
  83.   pSystemMenu->AppendMenu(MF_STRING,IDM_SYSMENU_ABOUT,_T("&About MyApp")); //SK modified for Unicode
  84. return 0;
  85. }
  86. BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
  87. {
  88. // TODO: Modify the Window class or styles here by modifying
  89. //  the CREATESTRUCT cs
  90. return CMDIFrameWnd::PreCreateWindow(cs);
  91. }
  92. /////////////////////////////////////////////////////////////////////////////
  93. // CMainFrame diagnostics
  94. #ifdef _DEBUG
  95. void CMainFrame::AssertValid() const
  96. {
  97. CMDIFrameWnd::AssertValid();
  98. }
  99. void CMainFrame::Dump(CDumpContext& dc) const
  100. {
  101. CMDIFrameWnd::Dump(dc);
  102. }
  103. #endif //_DEBUG
  104. /////////////////////////////////////////////////////////////////////////////
  105. // CMainFrame message handlers
  106. void CMainFrame::OnZoom() 
  107. {
  108. zoomcheck=!zoomcheck;
  109. }
  110. void CMainFrame::OnEditUndo() 
  111. {
  112. Undocheck=!Undocheck;
  113. }
  114. HMENU CMainFrame::NewMenu()
  115. {
  116.   static UINT toolbars[]={
  117.     IDR_MAINFRAME,
  118.     IDR_TOOLBAR
  119.   };
  120.   // Load the menu from the resources
  121.   m_menu.LoadMenu(IDR_MYMENUTYPE);
  122.   // Use ModifyODMenu to add a bitmap to a menu options.The first parameter
  123.   // is the menu option text string.If it's NULL, keep the current text
  124.   // string.The second option is the ID of the menu option, or the menu
  125.   // option text (use this for adding bitmaps to popup options) to change.
  126.   // The third option is the resource ID of the bitmap.This can also be a
  127.   // toolbar ID in which case the class searches the toolbar for the
  128.   // appropriate bitmap.Only Bitmap and Toolbar resources are supported.
  129.   m_menu.ModifyODMenu(NULL,ID_WINDOW_TILE,IDB_WINDOW_TILE);
  130.   m_menu.ModifyODMenu(NULL,_T("&Rocscience on the Web"),IDB_NET);//SK modified for Unicode
  131.   // Another method for adding bitmaps to menu options is through the
  132.   // LoadToolbars member function.This method allows you to add all
  133.   // the bitmaps in a toolbar object to menu options (if they exist).
  134.   // The first function parameter is an array of toolbar id's.
  135.   // The second is the number of toolbar id's. There is also a
  136.   // function called LoadToolbar that just takes an id.
  137.   m_menu.LoadToolbars(toolbars,2);
  138.   return(m_menu.Detach());
  139. }
  140. HMENU CMainFrame::NewDefaultMenu()
  141. {
  142.   m_default.LoadMenu(IDR_MAINFRAME);
  143.   m_default.LoadToolbar(IDR_MAINFRAME);
  144.   return(m_default.Detach());
  145. }
  146. void CMainFrame::OnUpdateEditUndo(CCmdUI* pCmdUI) 
  147. {
  148.   pCmdUI->SetCheck(Undocheck);
  149. }
  150. void CMainFrame::OnMeasureItem(int nIDCtl, LPMEASUREITEMSTRUCT lpMeasureItemStruct) 
  151. {
  152.   BOOL setflag=FALSE;
  153.   if(lpMeasureItemStruct->CtlType==ODT_MENU){
  154.     if(IsMenu((HMENU)lpMeasureItemStruct->itemID)){
  155.       CMenu* cmenu=CMenu::FromHandle((HMENU)lpMeasureItemStruct->itemID);
  156.       if(m_menu.IsMenu(cmenu)||m_default.IsMenu(cmenu)){
  157.         m_menu.MeasureItem(lpMeasureItemStruct);
  158.         setflag=TRUE;
  159.       }
  160.     }
  161.   }
  162. if(!setflag)CMDIFrameWnd::OnMeasureItem(nIDCtl, lpMeasureItemStruct);
  163. }
  164. LRESULT CMainFrame::OnMenuChar(UINT nChar, UINT nFlags, CMenu* pMenu) 
  165. {
  166.   LRESULT lresult;
  167.   if(m_menu.IsMenu(pMenu)||m_default.IsMenu(pMenu))
  168.     lresult=BCMenu::FindKeyboardShortcut(nChar, nFlags, pMenu);
  169. else
  170.     lresult=CMDIFrameWnd::OnMenuChar(nChar, nFlags, pMenu);
  171.   return(lresult);
  172. }
  173. void CMainFrame::OnEditCopy() 
  174. {
  175. // TODO: Add your command handler code here
  176. }
  177. void CMainFrame::OnEditCut() 
  178. {
  179. }
  180. void CMainFrame::OnEditPaste() 
  181. {
  182. // TODO: Add your command handler code here
  183. }
  184. void CMainFrame::OnUpdateZoom(CCmdUI* pCmdUI) 
  185. {
  186. pCmdUI->SetCheck(zoomcheck);
  187. }
  188. void CMainFrame::OnDefault() 
  189. {
  190.   CMenu *menu = AfxGetMainWnd()->GetMenu()->GetSubMenu(2);
  191.   if(::GetMenuDefaultItem(menu->m_hMenu,MF_BYPOSITION,0)==3)
  192.     ::SetMenuDefaultItem(menu->m_hMenu,(unsigned int)-1,MF_BYPOSITION);//SK: removed  warning C4245: 'argument' : conversion from 'const int' to 'unsigned int', signed/unsigned mismatch
  193.   else
  194.     ::SetMenuDefaultItem(menu->m_hMenu,3,MF_BYPOSITION);
  195. }
  196. void CMainFrame::OnUpdateDefault(CCmdUI* pCmdUI) 
  197. {
  198.   CMenu *menu = AfxGetMainWnd()->GetMenu()->GetSubMenu(2);
  199.   if(::GetMenuDefaultItem(menu->m_hMenu,MF_BYPOSITION,0)==3){
  200.     pCmdUI->SetRadio(TRUE);
  201.     pCmdUI->SetText(_T("Default ON"));//SK modified for Unicode
  202.   }
  203.   else{
  204.     pCmdUI->SetRadio(FALSE);
  205.     pCmdUI->SetText(_T("Default"));//SK modified for Unicode
  206.   }
  207. }
  208. void CMainFrame::OnInitMenuPopup(CMenu* pPopupMenu, UINT nIndex, BOOL bSysMenu) 
  209. {
  210. CMDIFrameWnd::OnInitMenuPopup(pPopupMenu, nIndex, bSysMenu);
  211.   if(!bSysMenu){
  212.     if(m_menu.IsMenu(pPopupMenu)||m_default.IsMenu(pPopupMenu))
  213.       BCMenu::UpdateMenu(pPopupMenu);
  214.   }
  215. }
  216. void CMainFrame::OnHomepage() 
  217. {
  218.   ShellExecute(::GetDesktopWindow(),_T("open"),//SK modified for Unicode
  219.     _T("http://www.rocscience.com/~corkum/BCMenu.html"),NULL,NULL,//SK modified for Unicode
  220.     SW_MAXIMIZE);
  221. }
  222. void CMainFrame::OnWindowTile() 
  223. {
  224. // TODO: Add your command handler code here
  225. }
  226. void CMainFrame::OnEnable() 
  227. {
  228.  disable_flag=!disable_flag;
  229. }
  230. void CMainFrame::OnUpdateEnable(CCmdUI* pCmdUI) 
  231. {
  232.   pCmdUI->Enable(!disable_flag);
  233.   if(!disable_flag)pCmdUI->SetText(_T("&Enabled"));//SK modified for Unicode
  234.   else pCmdUI->SetText(_T("&Disabled"));//SK modified for Unicode
  235. }
  236. void CMainFrame::OnDisable() 
  237. {
  238.  disable_flag=!disable_flag;
  239. }
  240. void CMainFrame::OnUpdateDisable(CCmdUI* pCmdUI) 
  241. {
  242.   pCmdUI->Enable(disable_flag);
  243.   if(disable_flag)pCmdUI->SetText(_T("&Enabled"));//SK modified for Unicode
  244.   else pCmdUI->SetText(_T("&Disabled"));//SK modified for Unicode
  245. }