工具栏
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中注释掉: