由于MFC提供的工具栏不够漂亮,我自己更改了工具栏的图象列表,然后加载自己喜欢的位图置于工具栏按钮上,做起来一切都较顺利,容易的就实现自己想要的效果了:不同的图片被放置到工具栏不同的铵钮上了。
实现代码在框架类的OnCreate函数中m_wndToolBar.CreateEx代码后面,如下:
VERIFY(m_wndToolBar.LoadToolBar(IDR_MAINFRAME));
HBITMAP hbm = (HBITMAP)::LoadImage(AfxGetInstanceHandle(),
MAKEINTRESOURCE(IDR_MAINFRAME),
IMAGE_BITMAP,
0,0, // cx,cy
LR_CREATEDIBSECTION | LR_LOADMAP3DCOLORS );
CBitmap bm;
bm.Attach(hbm); // Create image list and set in toolbar.
// Must use ILC_COLOR8 for 256-color images!
//
m_ilToolBar.Create(73,20, ILC_COLOR8, 4, 4);
m_ilToolBar.Add(&bm,(CBitmap*)NULL);
m_wndToolBar.GetToolBarCtrl().SetImageList(&m_ilToolBar);

由于工具栏在不同情况下,我设置了它的可操作和不可操作情,也就是工具栏按钮的有效与无效性!我做了这样一个想法,比如,工具栏某按钮有效时,显示图A,无效时显示图A的灰色效果图B,在直观上让工具栏按钮参生有效与无效感觉。这个操作我是在工具栏按钮的UPDATE_COMMAND_UI消息中加了如下代码来实现的。如下:(假设工具栏某一按钮的ID为:ID_DataSample)void CMainFrame::OnUpdateDataSample(CCmdUI* pCmdUI) 
{
// TODO: Add your command update UI handler code here
pCmdUI->Enable(WorkStatus); if(WorkStatus)//根据菜单按钮不同状态设置菜单按钮显示不同的图片
{
int index = m_wndToolBar.CommandToIndex(ID_DataSample);
m_wndToolBar.SetButtonInfo(index, ID_DataSample, TBBS_BUTTON, 0);
}
else
{
int index = m_wndToolBar.CommandToIndex(ID_DataSample);
m_wndToolBar.SetButtonInfo(index, ID_DataSample, TBBS_BUTTON, 9);
}
}

上面代码运行没有问题,而且也能按要求显示不同的图片。但是问题来了,我发现自pCmdUI->Enable(WorkStatus);语句后加了

       if(WorkStatus)//根据菜单按钮不同状态设置菜单按钮显示不同的图片
{
int index = m_wndToolBar.CommandToIndex(ID_DataSample);
m_wndToolBar.SetButtonInfo(index, ID_DataSample, TBBS_BUTTON, 0);
}
else
{
int index = m_wndToolBar.CommandToIndex(ID_DataSample);
m_wndToolBar.SetButtonInfo(index, ID_DataSample, TBBS_BUTTON, 9);
}

这段代码后,工具栏ID为ID_DataSample的铵钮虽然根据情况能显示不同的图片,但是该按钮始终都处于有效状态了。
而且该工具栏铵钮所对应的菜单栏所对应的菜单项却正常,该无效时还是无效,该有效时有效。
但如果我把

       if(WorkStatus)//根据菜单按钮不同状态设置菜单按钮显示不同的图片
{
int index = m_wndToolBar.CommandToIndex(ID_DataSample);
m_wndToolBar.SetButtonInfo(index, ID_DataSample, TBBS_BUTTON, 0);
}
else
{
int index = m_wndToolBar.CommandToIndex(ID_DataSample);
m_wndToolBar.SetButtonInfo(index, ID_DataSample, TBBS_BUTTON, 9);
}

这段代码去掉,则工具栏按钮的有效与无效状态显示将与其对应的菜单栏一样,显示正常,但是工具栏按钮无效时没有图片显示,而显示一片灰黑色。
说了这么多,也不知道自己说清楚了没有,总之我想要的就是工具栏在保正有效与无效性正常的情况下,能显示我想要显示的不同图片。期待高手帮忙指点!

解决方案 »

  1.   

    CImageList* SetDisabledImageList(CImageList* pImageList);
    CImageList* SetHotImageList(CImageList* pImageList);
    CImageList* SetImageList(CImageList* pImageList);==================================================
    m_wndToolBar.GetToolBarCtrl().SetImageList(&m_ilToolBar); 
      

  2.   

    pCmdUI->Enable(WorkStatus); //WorkStatus是否为FALSE,把这句放在函数最后看看。
      

  3.   


    刚刚细看回复,原来你的答案才有玄机。不过能不能详细点啊!
    CImageList* SetDisabledImageList(CImageList* pImageList); 
    函数怎么用呢?在什么时候用啊!
      

  4.   

    SetDisabledImageList与SetImageList用法是相同的。