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 */