ListCtrl的图标由CImageList的一个对象来管理。要更改它的图标,相应的改变CImageList,并SetImageList就行了。

解决方案 »

  1.   

    可是我是在insertitem之后要改变它呀
    是不是非得删除 再insert呀
    我想不删除就更改它
    不知怎么做
    好像有什么
    SetItemData(......的不过我不会用
      

  2.   

    CListCtrl& ListCtrl = GetListCtrl();
    m_LargeImageList.Create(IDB_LARGE_COMPUTERS, 32, 1, RGB(255, 255, 255));
    ListCtrl.SetImageList(&m_LargeImageList, LVSIL_NORMAL);LV_ITEM lvi;
    ......
    ListCtrl.InsertItem(&lvi);然后动态更换图标
    动态更换lvi.iImage为m_LargeImageList中某一图标号
    ......
    ListCtrl.SetItemState(nItem,&lvi);
      

  3.   

     
      CImageList* pListImage = new CImageList;
      pListImage->Create(32, 32, ILC_COLOR8 ¦ ILC_MASK, 2, 0);
      pListImage->Add(AfxGetApp()->LoadIcon(IDI_IMAGE));
      m_list.SetImageList(pListImage, LVSIL_SMALL); 
      m_list.InsertItem(1,"two", 0)
    原来我是这样做的
    老是改不回来
    帮我改改好吗
      

  4.   

      LV_ITEM lv;
      lv.mask = LVIF_IMAGE|LVIF_TEXT;
      lv.iImage = 0;
      lv.iItem=count;
      char ichar[10];
      CString str="vjeymyf";
      strcpy(ichar,strIP);
      lv.pszText=ip;
      m_list.InsertItem(&lv);可是什么都没有出来
      

  5.   

    lv.pszText=ichar;
    可是改后也不行
      

  6.   

    上面的LV_ITEM的一些属性可能你没设置,所以出不来,其实用m_list.InsertItem(1,"two", 0)是一样可以达到目的的。
    动态更换图标:SetItemState
      

  7.   

    要全都设置吗你是说我在插入时用m_list.InsertItem(1"two",0);
    在修改时
    选设置那个结构
    再setitemstate是吗
    可是关建是那个结构怎么设置
      

  8.   

      LV_ITEM lv;
      lv.mask = LVIF_IMAGE|LVIF_TEXT;
      lv.iImage = 0;
      lv.iSubItem =0;
      lv.iItem=0;
      lv.cchTextMax=10;
      char ichar[10];
      strcpy(ichar,strIP);  lv.pszText=ichar;
      m_list.InsertItem(&lv);
     
    这样之后 出来了
    可以插入
    可是用
    LV_ITEM lv;
    lv.mask = LVIF_IMAGE;
    lv.iImage = 1;
    lv.iSubItem =0;
    lv.iItem=0;
    m_list.SetItemState(0,&lv);//SetItemData(0,1);
    就达不到郊果(那只能设置它的状态)
    SetItemState( 本来就是不能动态必图标的
    不知道怎么办
      

  9.   

    设置状态后
    你用m_list.Update()看一下行不行
      

  10.   

    你的图标是第一列还是第二列,如果不是第一列,要添加LVS_EX_SUBITEMIMAGES
    如果动态修改列的图表,
    LV_ITEM lvitem;
    lvitem.mask=LVIF_IMAGE|LVIF_TEXT;
    lvitem.iItem=nItem;
    lvitem.iSubItem=nSubItem;
    lvitem.iImage=nNewImage;
    //lvitem.pszText=(LPTSTR)(LPCTSTR)strID;
    pListCtrl.SetItem(&lvitem);
      

  11.   

    其实设置状态是成功的 就是用我上面的代吗 当执行代码时 第一个item变成选中状态 以后怎么都不有心变它了可是我想要的是更改它的图标
    加上m_list.Update()之后是一样的
      

  12.   


    to:shizf()我是用small icon不是报表 没有第一列 第二列这分吧
    按你的做法LV_ITEM lv;
    lv.mask = LVIF_IMAGE|LVIF_TEXT;
    lv.iImage = 1;//改为的图标
    lv.iSubItem =0;
    lv.iItem=0;
    m_list.SetItem(&lv);//SetItemState(0,&lv);//SetItemData(0,1);
    这样也不行
    我加m_list.UpData(..也不行
      

  13.   

    按我上面的代码,在要更改的时候调用,
    LV_ITEM lvitem; 
    //选定要更改的项,设置mask,
    lvitem.mask=LVIF_IMAGE¦LVIF_TEXT;
    lvitem.iItem=nItem;
    lvitem.iSubItem=nSubItem;//新的图标
    lvitem.iImage=nNewImage;
    //更改
    pListCtrl.SetItem(&lvitem); 
    //这样应该可以更改的你是否在开始调用了pListCtrl->SetRedraw(FALSE);
    如果是,最后应该调用pListCtrl->SetRedraw(TRUE);
      

  14.   

    agree,如果SetItem行的话,最后Update应该也可以呀。
      

  15.   

    应该这样:在ImageList中可以加入多个图标,方法如下:
    HICON hIcon[2];
    int num;
    m_imageList.Create(16,16,0,8,8);
    hIcon[0]=AfxGetApp()->LoadIcon(IDI_ICON0);
    hIcon[1]=AfxGetApp()->LoadIcon(IDI_ICON1);
    for(num=0;num<2;num++)
    {
    m_imageList.Add(hIcon[num]);
    }
    然后插入行时由lvitem.iImage=nImage;(从1开始记数,按加入imagelist的顺序)
    pListCtrl->InsertItem(&lvitem);
    如果要修改,用
    lvitem.iImage=nImage;
    setItem(&lvitem);当然要让iImage的修改起作用,必须
    lvitem.mask=LVIF_IMAGE|....
      

  16.   

    要lvitem.mask=LVIF_IMAGE;
    就可以了
    谢谢大家 
    我也搞定
    给分喽