我有一个ListCtrl,要为它添加一些图标;还有一个ComboBox,我选择不同的选项时,要让ListCtrl的内容发生改变。我为ListCtrl设置了ImageList,并在ComboBox的SelectChange事件中为ImageList加载了不同的位图。现在的问题是,我SelectChange的时候,出现在ListCtrl中的ICON和我加载的时候的顺序不一样。请问高手,如何解决?

解决方案 »

  1.   

    你用什么方法为CImageList对象加载图像的?CImageList::ADD?
      

  2.   

    是的,我用Add方法。
    CBitmap bmpLayoutIco;
    switch( m_comboPageLayout.GetCurSel() )
    {
    case 0 :
    bmpLayoutIco.LoadBitmap(IDB_ALLLAYOUT);
    break;
    case 1 :
    bmpLayoutIco.LoadBitmap(IDB_BITMAP14);
    break;
    ...
    }
    m_ImageList.Add(&bmpLayoutIco, RGB(255,0, 255));     
    bmpLayoutIco.DeleteObject();
      

  3.   

    以上代码就是在ComboBox选择的时候用的吧?每次进行选择的时候,应该ImageList清空CImageList::Remove。顺序打乱或者显示的不是你想要的ICON,估计是因为没有清除完导致的。
      

  4.   

    我按你的方法用Remove了,但是显示没有删除完。我想问题可能因为没有删除完导致的。参考代码如下:
    for(int i=0;i<m_ImageList.GetImageCount();i++)
    {
         m_ImageList.ReMove(i);
    }
    CString str;
    str.Format("目前有:%d项",m_ImageList.GetImageCount());
    MessageBox(str);CBitmap bmpLayoutIco;
    switch( m_comboPageLayout.GetCurSel() )
    {
    case 0 :    
        bmpLayoutIco.LoadBitmap(IDB_ALLLAYOUT);        
        break;
    case 1 :    
        bmpLayoutIco.LoadBitmap(IDB_BITMAP14);        
        break;
    ...
    }
    m_ImageList.Add(&bmpLayoutIco, RGB(255,0, 255));     
    bmpLayoutIco.DeleteObject();
    ....
      

  5.   

    实在不行的话就直接在selectChange时用CImageList::DeleteImageList(),然后再重新CImageList::Create,再CListCtrl::SetImageList(),使你的listctrl与ImageList绑定。然后你再用CImageList::Add,这样的话一个ImageList就永远只Add一次。