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_TOOLBAR1))
{
TRACE0("Failed to create toolbar/n");
return -1; // fail to create
}
CImageList img;
// 前两个参数代表所要保存的位图大小,第 3 个代表位图像素颜色深度此处为 16 位的位图, // 第 4 个参数为所要插入的位图的数量,第五个参数为当所添加位图超过预先给定的数量时, //CImgList 自动添加空间的数量,此操作在位图数量很大时会很慢
img.Create(18, 18, ILC_COLOR4, 4, 2);
img.Add(AfxGetApp()->LoadIcon(IDI_ICON1)); // 插入位图
img.Add(AfxGetApp()->LoadIcon(IDI_ICON2));
img.Add(AfxGetApp()->LoadIcon(IDI_ICON3));
img.Add(AfxGetApp()->LoadIcon(IDI_ICON4));
m_wndToolBar.GetToolBarCtrl().SetImageList(&img); // 设置工具栏的 CImgList 对象
img.Detach(); // 释放资源句柄,因为此处为局部变量,释放后句柄由主窗口接收,并不因为变量超出作用域而销毁,也可以将 CImagList 设置为成员变量解决这个问题。
// 参数 1 :工具栏上按钮的下标,分割符也要占用一个下标
// 参数 2 :按钮的资源标识符
// 参数 3 :风格表示,此处标明这是一个按钮
// 参数 4 :按钮上对应位图的标识,这个之前插入 CImageList 时的先后顺序有关
m_wndToolBar.SetButtonInfo(2, ID_TOOLBTN1, TBBS_BUTTON, 0);
m_wndToolBar.SetButtonInfo(4, ID_TOOLBTN2, TBBS_BUTTON, 1);
m_wndToolBar.SetButtonInfo(6, ID_TOOLBTN3, TBBS_BUTTON, 2);
m_wndToolBar.SetButtonInfo(8, ID_TOOLBTN4, TBBS_BUTTON, 3);
如果按钮处于禁用状态可以在 Update_Command_UI 的消息响应中将它启用具体代码如下:
void CMainFrame::OnUpdateToolbtn1(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
pCmdUI->Enable();
}