菜单类
CMenu,封装了关于菜单的各种操作成员函数,另外还封装了一个非常重要的成员变量m_hMenu(菜单句柄)
菜单使用
- 添加菜单资源
- 加载菜单

工具栏相关类
CToolBarCtrl-》父类是CWnd,封装了关于工具栏控件的各种操作。
CToolBar-》父类是CControlBar,封装了关于工具栏的操作,以及和框架窗口的关系。
工具栏的使用
- 添加工具栏资源
- 创建工具栏 CToolBar::CreateEx
- 加载工具栏 CToolBar::LoadToolBar
- 设置工具栏的停靠
a. CToolBar::EnableDocking (工具栏想停靠在的位置)
b.CFrameWnd::EnableDocking (框架允许工具栏停靠在的位置)
c.CFrameWnd::DockControlBar (临时停靠的位置)

上面两图:
菜单项ID和工具栏按钮ID一样,相当于两者功能被绑定
代码示例
cpp
#include <afxwin.h>
#include "resource.h"
#include <afxext.h> //CToolBar
class CMyFrameWnd :public CFrameWnd {
DECLARE_MESSAGE_MAP()
public:
afx_msg void OnNew();
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
afx_msg void OnSet();
public:
//工具栏
CToolBar toolbar;
};
BEGIN_MESSAGE_MAP(CMyFrameWnd, CFrameWnd)
//菜单项ID和工具栏按钮ID一样,相当于两者功能被绑定
ON_COMMAND(ID_NEW,OnNew)
ON_WM_CREATE()
ON_COMMAND(ID_SET, &CMyFrameWnd::OnSet)
END_MESSAGE_MAP()
void CMyFrameWnd::OnNew()
{
AfxMessageBox("新建菜单项被点击");
}
void CMyFrameWnd::OnSet()
{
AfxMessageBox("红色按钮被点击");
}
class CMyWinApp :public CWinApp {
public:
virtual BOOL InitInstance();
};
int CMyFrameWnd::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
return -1;
//1.添加工具栏资源
//2.创建工具栏 CBRS_GRIPPER 给工具栏添加把手
toolbar.CreateEx(this,TBSTYLE_FLAT,WS_CHILD|WS_VISIBLE|CBRS_ALIGN_TOP|CBRS_GRIPPER);
//3.加载工具栏
toolbar.LoadToolBar(IDR_TOOLBAR1);
//4.设置工具栏停靠
toolbar.EnableDocking(CBRS_ALIGN_ANY); //设置工具栏想停靠在的位置
this->EnableDocking(CBRS_ALIGN_ANY); //框架允许工具栏停靠在的位置
this->DockControlBar(&toolbar,AFX_IDW_DOCKBAR_BOTTOM); //临时停靠的位置
return 0;
}
BOOL CMyWinApp::InitInstance() {
CMyFrameWnd* pFrame = new CMyFrameWnd;
//1.添加菜单资源
//2.IDR_MENU1 加载菜单资源
pFrame->Create(NULL,"MFCToolBar",WS_OVERLAPPEDWINDOW,CFrameWnd::rectDefault,NULL,(CHAR*)IDR_MENU1);
m_pMainWnd = pFrame;
pFrame->ShowWindow(SW_SHOW);
pFrame->UpdateWindow();
return TRUE;
}
CMyWinApp theApp;
示例图
