做个增加设备的循环调用(AddDevice())函数,不同的设备名,显示不同的图标。但是下面代码,有错误,加上
“m_imageList.DeleteImageList();”这句就只显示一种图标的样式,不加就有错误出现,请各位高手帮忙看看!void AddDevice(CString strName)
{
  m_imageList.DeleteImageList();
  m_imageList.Create(32,32,ILC_COLOR4,3,2);
  if(strName=="DVD/HDD Recorder"){
m_hIcon = ::LoadIcon(AfxGetResourceHandle(),MAKEINTRESOURCE(IDI_ICON1));
}
  else if(strName=="Digital Tuner"){
m_hIcon = ::LoadIcon(AfxGetResourceHandle(),MAKEINTRESOURCE(IDI_ICON2));
}
  else if(strName=="D-VHS"){
m_hIcon = ::LoadIcon(AfxGetResourceHandle(),MAKEINTRESOURCE(IDI_ICON3));
}
  else{
m_hIcon = ::LoadIcon(AfxGetResourceHandle(),MAKEINTRESOURCE(IDI_ICON4));
}
  m_imageList.Add(m_hIcon);
  m_listctrldv.SetImageList(&m_imageList,LVSIL_NORMAL);  
  m_listctrldv.InsertItem(0,strName);
  m_listctrldv.SetItemText(0,1,tszModleName);
  //set temp 
  m_listctrldv.SetItemText(0,2,strDeviceStatus);
  …………
  …………
  …………}

解决方案 »

  1.   

    你每次调用AddDevice都重新构建了m_imageList,
    你把m_imageList构建放到外面,
    这个只要构建一次啊,然后只是每次插值的时侯选择不同的图标就可以了
      

  2.   

    你每次都重新构建m_imageList,而且,每次构建的时候都只插了一个图标
    当然只显示一种图标了
      

  3.   

    谢谢" BestBear(天外飞熊) "的回复,我把" m_imageList.Create(32,32,ILC_COLOR4,3,2);
    "的创建放到外面了,删除了" m_imageList.DeleteImageList();"可是为什么添加哪个设备,哪个设备的图标就一真被所有的设备显示那?
      

  4.   

    m_imageList.Create(32,32,ILC_COLOR4,3,2);
    m_hIcon = ::LoadIcon(AfxGetResourceHandle(),MAKEINTRESOURCE(IDI_ICON1));
    m_imageList.Add(m_hIcon);
    m_hIcon = ::LoadIcon(AfxGetResourceHandle(),MAKEINTRESOURCE(IDI_ICON2));
    m_imageList.Add(m_hIcon);
    m_listctrldv.SetImageList(&m_imageList,LVSIL_NORMAL);
    SetImageList同样要放到外面啊,只能set一次啊,第二次set会把第一次的覆盖掉啊
    总之SetImageList完成了,imdgelist才算构检好了,也就是可以用了;在set之前要把所有你要的图标都加进去,然后才能SetImageList
      

  5.   

    先要把所有图标导入到CImageList对象中,然后SetImageList然后添加某个项的时候指定iImage和iSelectedImage
      

  6.   

    你添加设备地时候,只是往listctrl中添加一行,这时只要insertitem就可以了,在你insertitem的时侯,你要哪个图标,你只要在insertitem中指定在imagelist中的某个图标的序号就可以了啊。动态添加是一样的啊,什么时侯添加身么时侯在insertitem里指定要的图标在imagelist中的序号就可以了啊