MFC框体添加菜单栏工具栏状态栏

菜单栏工具栏状态栏

  • 菜单栏

CMenu封装了菜单句柄和相关菜单API

1.1添加资源

1.2CMainFrame::OnCreate函数中添加菜单;CMenu::Attach——将菜单句柄附加到菜单对象中;CMenu::Detach——将菜单句柄从菜单对象中分离

1.3 命令相关 ON_COMMAND

1.4 菜单项的状态  ON_UPDATE_COMMAND_UI    CCmdUI

  • 工具栏

工具栏相关类CToolBarCtrl——父类是CWnd,封装了Toolbar Control控件的相关信息,API等。CToolBar——父类CControlBar,封装了ToolBarCFrameWnd之间的关系。

2.1创建工具栏   CToolBar::Create/Ex

2.2 加载工具栏

2.3工具栏的停靠   CToolBar::EnableDocking设置工具栏允许停靠;CFrameWnd::EnableDocking设置窗口允许被停靠;CFrameWnd::DockControlBar设置停靠位置。

2.4命令处理

2.5工具栏的显示与隐藏  CFrameWnd::ShowControlBar

2.6信息提示  增加风格 CBRS_TOOLTIPS;设置提示信息。

  • 状态栏

状态栏相关类CStatusBarCtrl——父类是CWnd,封装了StatusBars的相关信息,API等。CStatusBar——父类CControlBar,封装了状态栏和窗口之间的关系。

3.1创建状态栏  CStatusBar::Create/Ex

3.2设置状态栏指示器 CStatusBar::SetIndicators

3.3设置或获取状态栏信息CStatusBar::SetPaneText,CStatusBar::GetPaneText

实例

[cpp]  view plain copy
  1. #include "stdafx.h"   
  2. #include "Resource.h"  
  3. UINT g_nIndicators[]=  
  4. {  
  5.     0,  
  6.     IDS_TIME,  
  7.     ID_INDICATOR_CAPS,  
  8.     ID_INDICATOR_NUM,  
  9.     ID_INDICATOR_SCRL  
  10. };  
  11. class CMainFrame:public CFrameWnd  
  12. {  
  13. public:  
  14.     DECLARE_MESSAGE_MAP()  
  15.     afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);//菜单栏,工具栏,状态栏创建与加载  
  16.     //菜单栏消息处理函数  
  17.     afx_msg void OnExit();  
  18.     afx_msg void OnOpen();  
  19.     afx_msg void OnUpdateUIOpen(CCmdUI* pCmdUI);  
  20.     //工具栏消息处理函数  
  21.     afx_msg void OnViewStandard();  
  22.     afx_msg void OnUpdateUIStandard(CCmdUI* pCmdUI);  
  23.     //状态栏消息处理函数  
  24.     afx_msg void OnTimer(UINT nIDEvent);   
  25.     afx_msg void OnMouseMove(UINT nFlags, CPoint point);  
  26. private:  
  27.     CToolBar mWndToolBar;  
  28.     CStatusBar mWndStatusBar;  
  29. };  
  30. BEGIN_MESSAGE_MAP(CMainFrame,CFrameWnd)  
  31. ON_WM_CREATE()  
  32. ON_COMMAND(ID_OPEN,OnOpen)  
  33. ON_COMMAND(ID_EXIT,OnExit)  
  34. ON_UPDATE_COMMAND_UI(ID_OPEN,OnUpdateUIOpen)  
  35. ON_COMMAND(ID_VIEW_STANDARD,OnViewStandard)  
  36. ON_UPDATE_COMMAND_UI(ID_VIEW_STANDARD,OnUpdateUIStandard)  
  37. ON_WM_TIMER()  
  38. ON_WM_MOUSEMOVE()  
  39. END_MESSAGE_MAP()  
  40. int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)  
  41. {   
  42.     //添加菜单  
  43.     CMenu menu;  
  44.     menu.LoadMenuW(IDR_MAINFRAME);//加载菜单资源  
  45.     SetMenu(&menu);//将菜单设置到窗口  
  46.     menu.Detach();//将菜单句柄与菜单对象分离  
  47.   
  48.     //添加工具栏  
  49.     mWndToolBar.CreateEx(this,TBSTATE_CHECKED,WS_CHILD|WS_VISIBLE|CBRS_ALIGN_ANY|CBRS_TOOLTIPS);  
  50.     mWndToolBar.LoadToolBar(IDR_MAINFRAME);//加载工具栏  
  51.     //停靠工具栏  
  52.     mWndToolBar.EnableDocking(CBRS_ALIGN_ANY);//1.设置工具栏允许停靠  
  53.     EnableDocking(CBRS_ALIGN_ANY);//设置框架窗口允许被停靠  
  54.     DockControlBar(&mWndToolBar,AFX_IDW_DOCKBAR_TOP);//停靠工具栏操作  
  55.     mWndToolBar.SetWindowTextW(L"标准工具栏");//设置工具栏的标题  
  56.   
  57.     //创建状态栏  
  58.     mWndStatusBar.CreateEx(this);  
  59.     mWndStatusBar.SetIndicators(g_nIndicators,sizeof(g_nIndicators)/sizeof(UINT));//设置指示灯  
  60.     SetTimer(100,1000,NULL);//启动定时器  
  61.     return 0;  
  62. }  
  63. void CMainFrame::OnOpen()  
  64. {  
  65.     MessageBox(L"OnOpen");  
  66. }  
  67. void CMainFrame::OnExit()  
  68. {  
  69.     MessageBox(L"OnExit");  
  70.     //PostQuitMessage(0);  
  71. }  
  72. void CMainFrame::OnUpdateUIOpen(CCmdUI* pCmdUI)  
  73. {  
  74.     pCmdUI->SetCheck();  
  75.     pCmdUI->SetRadio();  
  76.     pCmdUI->SetText(L"Open");  
  77. }  
  78. void CMainFrame::OnViewStandard()  
  79. {  
  80.     if (mWndToolBar.IsWindowVisible())  
  81.     {  
  82.         ShowControlBar(&mWndToolBar,FALSE,FALSE);  
  83.     }  
  84.     else  
  85.     {  
  86.         ShowControlBar(&mWndToolBar,TRUE,FALSE);  
  87.     }  
  88. }  
  89. void CMainFrame::OnUpdateUIStandard(CCmdUI* pCmdUI)  
  90. {  
  91.     pCmdUI->SetCheck(mWndToolBar.IsVisible());  
  92. }     
  93. void CMainFrame::OnTimer(UINT nIDEvent)  
  94. {  
  95.     CTime t=CTime::GetCurrentTime();  
  96.     CString strTime=t.Format("%Y-%m-%d %H:%M:%S");  
  97.     mWndStatusBar.SetPaneText(1,strTime);  
  98. }  
  99. void CMainFrame::OnMouseMove(UINT nFlags, CPoint point)  
  100. {  
  101.     CString strPt;  
  102.     strPt.Format(L"坐标:X=%d,Y=%d",point.x,point.y);  
  103.     mWndStatusBar.SetPaneText(0,strPt);  
  104. }  
  105. class MFCMenu:public CWinApp  
  106. {  
  107. public:  
  108.     virtual BOOL InitInstance();    
  109. };  
  110. BOOL MFCMenu::InitInstance()  
  111. {  
  112.     CMainFrame *pFrame=new CMainFrame;  
  113.     pFrame->Create(NULL,L"MFCMenue");  
  114.     //pFrame->Create(NULL,L"MFCToolbar",WS_OVERLAPPEDWINDOW,CFrameWnd::rectDefault,NULL,MAKEINTRESOURCE(IDR_MAINFRAME));  
  115.     m_pMainWnd=pFrame;  
  116.     pFrame->ShowWindow(SW_SHOW);  
  117.     pFrame->UpdateWindow();  
  118.     return TRUE;  
  119. }  
  120. MFCMenu theApp;  

 

菜单栏的一些资源

[cpp]  view plain copy
  1.   
  2. // Bitmap   
  3. IDR_MAINFRAME           BITMAP                  "res\\toolbar1.bmp"  
  4.   
  5.   
  6. // Toolbar   
  7.   
  8. IDR_MAINFRAME TOOLBAR 16, 15  
  9. BEGIN  
  10.     BUTTON      ID_OPEN  
  11.     BUTTON      ID_EXIT  
  12.     SEPARATOR  
  13.     BUTTON      ID_EDIT_COPY  
  14.     BUTTON      ID_EDIT_PASTE  
  15.     SEPARATOR  
  16.     BUTTON      ID_APP_ABOUT  
  17. END  
  18.   
  19. // Menu   
  20. IDR_MAINFRAME MENU  
  21. BEGIN  
  22.     POPUP "文件(&F)"  
  23.     BEGIN  
  24.         MENUITEM "打开(&O)",                      ID_OPEN  
  25.         MENUITEM "退出(&X)",                      ID_EXIT  
  26.     END  
  27.     POPUP "视图(&V)"  
  28.     BEGIN  
  29.         POPUP "工具栏(&T)"  
  30.         BEGIN  
  31.             MENUITEM "标准(&S)",                      ID_VIEW_STANDARD  
  32.         END  
  33.     END  
  34. END  
  35. /  
  36. STRINGTABLE  
  37. BEGIN  
  38.     IDS_TIME                "                             "  
  39. END  

运行结果:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值