00. 目录
文章目录
01. 案例概述
默认情况下,MFC中提供的工具栏只能显示简单的图像。在实际开发过程中如何在工具栏中显示自定义图标呢?本案例实现了一个带有图标的工具栏按钮,效果如下图所示。
02. 开发环境
系统环境:Windows 10
开发环境:Visual Studio 2019
03. 关键技术
工具栏CToolBar提供了一个GetToolBarCtrl方法,用于获得一个CToolBarCtrl对象,该对象提供了一个SetImageList方法用于设置工具栏关联的图像列表控件。只要在程序中创建一个图像列表,并向图像列表中添加图标,将其与工具栏关联,那么工具栏按钮就会显示图像。
04. 程序设计
4.1 新建基于单文档视图结构的应用程序。
4.2 添加图标资源,将图标资源拷贝到项目所在的res目录中,然后找到资源视图,添加图标资源。
4.2 在框架类中定义一个CImageList对象m_Imagelist。
private:
CImageList m_ImageList;
4.3 在框架类的OnCreate方法中创建图像列表,并向图像列表中添加图标。创建工具栏,将工具栏与图像列表关联。设置工具栏按钮的大小。
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
return -1;
//创建图像列表,向图像列表中添加图标
m_ImageList.Create(32, 32, ILC_COLOR24 | ILC_MASK, 0, 1);
//添加一个或多个图象到图象列表中
for (int i = 0; i < 9; i++)
{
m_ImageList.Add(AfxGetApp()->LoadIconW(IDI_ICON1 + i));
}
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; // 未能创建
}
//设置工具栏图像列表
m_wndToolBar.GetToolBarCtrl().SetImageList(&m_ImageList);
//设置工具栏按钮大小
m_wndToolBar.GetToolBarCtrl().SetButtonSize(CSize(40, 40));
//设置工具栏按钮图像大小
m_wndToolBar.GetToolBarCtrl().SetBitmapSize(CSize(30, 30));
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. 秘笈心法
工具栏种类
工具栏分为带图标的工具栏、带文字的工具栏和即带图标又带文字的工具栏。带图标的工具栏通过图标的演示作用很容易让人记忆,所以使用起来非常方便,即带图标又带文字的工具栏比只带图标的工具栏更加方便,单图标下方的文字的数量有限,只能是起到提示作用的文本,主要还是依靠图标的演示作用,而且需要结合提示条对工具栏按钮进行提示。
06. 源码下载
6.1 带图标的工具栏示例
下载: