工具栏
1、相关类
CToolBarCtrl - 父类CWnd,封装了关于工具栏控件的操作。
CToolBar - 父类CControlBar,封装了关于工具栏和框架窗口之间的关系,也包括工具栏的创建
2、工具栏的使用
2.1添加工具栏资源
在程序的资源视图中的Toolbar下的IDR_MAINFRAME中的工具栏上点击最后一个空白按钮,添加ID为IDM_TEST的自定义按钮:

用鼠标将新添加的按钮向右拖动一点距离后松开,即可在该按钮和其之前的按钮之间添加分隔符;
在菜单资源的顶层菜单项【帮助】的下拉菜单项中添加ID为IDM_TEST的Test菜单项,并为该菜单项添加消息响应函数:

void CMainFrame::OnTest()
{
// TODO: Add your command handler code here
MessageBox("test");
}
运行程序可发现,点击菜单栏【帮助】下的【Test】菜单项和点击工具栏中的【T】按钮弹出的是同一个消息框,即两者的消息响应函数均为OnTest函数,因为两者的资源ID相同;
删除工具栏上某个按钮的方法:在资源窗口中,鼠标左击选中工具栏的某个按钮上,将该按钮拖出工具栏后松开鼠标,即可删除该按钮;
2.2创建工具栏 CToolBar::CreateEx / CToolBar::Create
BOOL CreateEx(
CWnd* pParentWnd, //指定工具栏对象的父窗口
DWORD dwCtrlStyle = TBSTYLE_FLAT, //设置内嵌在工具栏上的CToolBarCtrl对象创建时的扩展风格
DWORD dwStyle = WS_CHILD | WS_VISIBLE | CBRS_ALIGN_TOP, //工具栏的样式
CRect rcBorders = CRect(0, 0, 0, 0), //工具栏边框的宽度
UINT nID = AFX_IDW_TOOLBAR //工具栏子窗口的ID
);
BOOL Create(
CWnd* pParentWnd, //指定工具栏对象的父窗口
DWORD dwStyle = WS_CHILD | WS_VISIBLE | CBRS_TOP, //工具栏的样式
UINT nID = AFX_IDW_TOOLBAR //工具栏子窗口的ID
);
在工程的资源窗口中插入新的工具栏资源,并在该工具栏上添加按钮:

构造一个CToolBar对象,为CMainFrame类添加成员变量:CToolBar m_newToolBar

在CMainFrame类的OnCreate函数中调用CreateEx或Create函数创建工具栏,并与CToolBar对象相关联;
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
......
if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
!m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
{
TRACE0("Failed to create toolbar\n");
return -1; // fail to create
}
......
// TODO: Delete these three lines if you don't want the toolbar to
// be dockable
m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
EnableDocking(CBRS_ALIGN_ANY);
DockControlBar(&m_wndToolBar);
......
//上方对照可见MFC自动创建默认工具栏的方法
if (!m_newToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
!m_newToolBar.LoadToolBar(IDR_TOOLBAR1))
{
TRACE0("Failed to create toolbar\n");
return -1; // fail to create
}
m_newToolBar.EnableDocking(CBRS_ALIGN_ANY);
DockControlBar(&m_newToolBar);
return 0;
}
2.3加载工具栏
方法一:调用LoadToolBar函数加载工具栏资源
方法二:调用LoadBitmap函数加载包含工具栏按钮图像的位图;调用SetButtons函数设置按钮样式,并把工具栏上的一个按钮与位图中的一个图像相关联
2.4工具栏的停靠(船坞化)
1)工具栏准备停靠的位置
CToolBar::EnableDocking
2)框架窗口允许停靠的位置
CFrameWnd::EnableDocking
3)框架窗口确定工具栏暂时停靠的位置
CFrameWnd::DockControlBar
2.5工具栏的显示和隐藏
CFrameWnd::ShowControlBar -显示/隐藏工具栏
CWnd::IsWindowVisible(); -无参函数,判断一个窗口处于显示还是隐藏状态
在程序的资源窗口中菜单栏的顶层菜单项【查看】的下拉菜单项中添加【自定义工具栏】的菜单项,该菜单项默认带有复选标记,对应为自定义工具栏的显示,当鼠标点击该菜单项时,复选标记去除,对应自定义工具栏隐藏,再次点击则显示;

void CMainFrame::OnViewNewtoolbar()
{
// TODO: Add your command handler code here
ShowControlBar(&m_newToolBar,!m_newToolBar.IsWindowVisible(),FALSE);
}
void CMainFrame::OnUpdateViewNewtoolbar(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
pCmdUI->SetCheck(m_newToolBar.IsWindowVisible());
}
2.6去除工具栏
1)在CMainFrame的头文件中注释掉:
2)在CMainFrame::OnCreate中注释掉:

浙公网安备 33010602011771号