00. 目录
01. 案例概述
通过MFC向导创建的应用程序,默认情况下工具栏是可以改变位置的,也就是说可以在父窗体上移动,但本实例创建了不能够改变按钮位置的工具栏。效果如下图所示。
02. 开发环境
系统环境:Windows 10
开发环境:Visual Studio 2019
03. 关键技术
MFC向导创建的工具栏是使用CToolBar类的CreateEx方法实现的,该方法创建的工具栏其左侧有条导航线,而且可以对工具栏进行拖动,要创建固定按钮的工具栏需要使用CToolBar类的Create方法实现。
Create方法同CreateEx方法一样都是用来创建工具栏的。具体语法如下:
BOOL Create( CWnd* pParentWnd, DWORD dwStyle = WS_CHILD | WS_VISIBLE | CBRS_TOP, UINT nID = AFX_IDW_TOOLBAR );
参数说明:
pParentWnd:指定父窗体指针。
dwStyle:指定工具栏样式。
nID:设置工具栏资源ID。
04. 程序设计
(1)新建一个基于单文档视图结构的应用程序。
(2)向工程中添加ID属性为IDB_BITMAP1的工具栏位图。
(3)在CMainFrame类的OnCreate函数中创建工具栏,函数实现代码如下:
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
return -1;
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("未能创建工具栏\n");
return -1; // 未能创建
}
if (!m_wndStatusBar.Create(this))
{
TRACE0("未能创建状态栏\n");
return -1; // 未能创建
}
m_wndStatusBar.SetIndicators(indicators, sizeof(indicators)/sizeof(UINT));
// TODO: 如果不需要可停靠工具栏,则删除这三行
//是工具栏可以停靠
//m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
//是主框架可以被停靠
//EnableDocking(CBRS_ALIGN_ANY);
//控件条停靠到框架窗口
//DockControlBar(&m_wndToolBar);
return 0;
}
05. 秘笈心法
工具栏的创建方法
使用CToolBar类的CreateEx方法可以创建增强效果的工具栏,而Create方法可以快速的创建工具栏,使用Create方法只设置一个父窗体指针参数即可,但Create方法创建的工具栏样式比较简单。
06. 源码下载
07. 附录
参考: 《Visual C++从入门到精通(项目案例版)》