MFC运行中动态修改工具栏图标
代码示例#
https://download.csdn.net/download/qq_44575789/86993010
CToolBar类#
实现#
加载位图的成员变量
CToolBar m_ToolBar;
CBitmap m_bitmapEmpty;
CBitmap m_bitmap1;
CBitmap m_bitmap2;
CBitmap m_bitmap3;
CBitmap m_bitmap4;
CImageList m_ImageList;
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);
点击事件及其修改方法
/* 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类#
- 工具栏变量
/* START */
CMFCToolBar m_ToolBar;
/* END */
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();
- 修改事件
/* 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 */
作者:Esofar
出处:https://www.cnblogs.com/WindSnowLi/p/16998145.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?