【MFC】带图标的工具栏

00. 目录

文章目录

01. 案例概述

默认情况下,MFC中提供的工具栏只能显示简单的图像。在实际开发过程中如何在工具栏中显示自定义图标呢?本案例实现了一个带有图标的工具栏按钮,效果如下图所示。
【MFC】带图标的工具栏

02. 开发环境

系统环境:Windows 10

开发环境:Visual Studio 2019

03. 关键技术

工具栏CToolBar提供了一个GetToolBarCtrl方法,用于获得一个CToolBarCtrl对象,该对象提供了一个SetImageList方法用于设置工具栏关联的图像列表控件。只要在程序中创建一个图像列表,并向图像列表中添加图标,将其与工具栏关联,那么工具栏按钮就会显示图像。

04. 程序设计

4.1 新建基于单文档视图结构的应用程序。
【MFC】带图标的工具栏

4.2 添加图标资源,将图标资源拷贝到项目所在的res目录中,然后找到资源视图,添加图标资源。
【MFC】带图标的工具栏

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 带图标的工具栏示例

下载:

07. 附录

上一篇:ural1297 求最长回文子串 | 后缀数组


下一篇:分享一下Steam搬砖项目,常规的操作流程,月入6000+教程。