MFC运行中动态修改工具栏图标

代码示例

https://download.csdn.net/download/qq_44575789/86993010

CToolBar类

实现

  1. 加载位图的成员变量
	CToolBar m_ToolBar;
	CBitmap m_bitmapEmpty;
	CBitmap m_bitmap1;
	CBitmap m_bitmap2;
	CBitmap m_bitmap3;
	CBitmap m_bitmap4;
	CImageList m_ImageList;
  1. OnInitDialog()创建初始化
if (!m_ToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_ALIGN_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS) ||
		!m_ToolBar.LoadToolBar(IDR_TOOLBAR1))
	{
		TRACE0("未能创建工具栏\n");
		AfxMessageBox(_T("未能创建工具栏\n"));
		return FALSE;      // 未能创建  
	}
	m_ToolBar.ShowWindow(SW_SHOW);
	//控件条定位  
	RepositionBars(AFX_IDW_CONTROLBAR_FIRST, AFX_IDW_CONTROLBAR_LAST, 0);

	// 加载初始图片
	m_bitmapEmpty.LoadBitmapW(IDB_EMPTY);
	m_bitmap1.LoadBitmapW(IDB_BITMAP1);
	m_bitmap2.LoadBitmapW(IDB_BITMAP2);
	m_bitmap3.LoadBitmapW(IDB_BITMAP3);
	m_bitmap4.LoadBitmapW(IDB_BITMAP4);
	m_ImageList.Create(32, 32, ILC_COLOR32, 4, 4);
	// 原始使用空白,方便观察
	m_ImageList.Add(&m_bitmapEmpty, RGB(0, 0, 0));
	m_ImageList.Add(&m_bitmapEmpty, RGB(0, 0, 0));
	m_ImageList.Add(&m_bitmapEmpty, RGB(0, 0, 0));
	m_ImageList.Add(&m_bitmapEmpty, RGB(0, 0, 0));
	// 设置工具栏图标
	m_ToolBar.GetToolBarCtrl().SetImageList(&m_ImageList);
  1. 点击事件及其修改方法
/* START */
void CDyToolBarIcoDlg::OnButton1()
{
	// 替换m_ImageList第一个元素为m_bitmap1
	m_ImageList.Replace(0, &m_bitmap1, NULL);
	// 刷新工具栏图标
	m_ToolBar.GetToolBarCtrl().SetImageList(&m_ImageList);
}


void CDyToolBarIcoDlg::OnButton2()
{
	m_ImageList.Replace(1, &m_bitmap2, NULL);
	m_ToolBar.GetToolBarCtrl().SetImageList(&m_ImageList);
}


void CDyToolBarIcoDlg::OnButton3()
{
	m_ImageList.Replace(2, &m_bitmap3, NULL);
	m_ToolBar.GetToolBarCtrl().SetImageList(&m_ImageList);
}


void CDyToolBarIcoDlg::OnButton4()
{
	m_ImageList.Replace(3, &m_bitmap4, NULL);
	m_ToolBar.GetToolBarCtrl().SetImageList(&m_ImageList);
}
/* END */

CMFCToolBar类

  1. 工具栏变量
	/* START */
	CMFCToolBar m_ToolBar;
	/* END */
  1. OnInitDialog()创建默认的图标
if (!m_ToolBar.CreateEx(this, TBSTYLE_AUTOSIZE, WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC | CBRS_FLOATING, CRect(1, 1, 1, 1), IDR_TOOLBAR1) ||
		!m_ToolBar.LoadToolBar(IDR_TOOLBAR1, 0, 0, TRUE, 0, 0, IDB_BITMAP1))

	{
		TRACE0("未能创建工具栏\n");
		return -1;      // 未能创建
	}
	m_ToolBar.AdjustSizeImmediate();
  1. 修改事件
/* START */
void CMFCToolBarDlg::OnButton1()
{
	// 设置第一个图标为第五个图
	m_ToolBar.SetButtonInfo(0, IDB_BITMAP1, TBBS_BUTTON, 4);
}


void CMFCToolBarDlg::OnButton2()
{
	m_ToolBar.SetButtonInfo(1, IDB_BITMAP1, TBBS_BUTTON, 5);
}


void CMFCToolBarDlg::OnButton3()
{
	m_ToolBar.SetButtonInfo(2, IDB_BITMAP1, TBBS_BUTTON, 6);
}


void CMFCToolBarDlg::OnButton4()
{
	m_ToolBar.SetButtonInfo(3, IDB_BITMAP1, TBBS_BUTTON, 7);
}
/* END */
  • 7
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值