我现通过CImageList可以设置列表的每行的第一列显示图标。 m_listServer.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_FLATSB);
m_listServer.SetImageList(&m_wndImageList2, LVSIL_SMALL);现在的问题是:通过SetImageList设置的每一行的图标都一样。我应该如何去修改指定行的图标呢?即我右击某行,即可以让这行显示不同的图标?

解决方案 »

  1.   

    InsertItem时,可以指定条目的图片序号,在SetImageList中设置的那个的ImageList中的序号。
    CListCtrl没有封装单独设置Item条目的函数,所以如果你想在Item插入后再修改,就只能先GetItem出来,改了再SetItem回去。
      

  2.   

    可是,如果我对某一行SetItem更改图标的时候,其他的行也跟着更改图标。
      

  3.   

    不会吧,你是不是在循环中把所有Item都设了。
      

  4.   

    CListCtrl::SetItem()Sets some or all of a list view item's attributes.  
    BOOL SetItem(
       const LVITEM* pItem 
    );
    BOOL SetItem(
       int nItem,
       int nSubItem,
       UINT nMask,
       LPCTSTR lpszItem,
       int nImage,
       UINT nState,
       UINT nStateMask,
       LPARAM lParam 
    );
    BOOL SetItem(
       int nItem,
       int nSubItem,
       UINT nMask,
       LPCTSTR lpszItem,
       int nImage,
       UINT nState,
       UINT nStateMask,
       LPARAM lParam,
       int nIndent 
    );
     
      

  5.   

    int InsertItem(
       int nItem,
       LPCTSTR lpszItem,
       int nImage 
    );
    插入时就可以指定了.
      

  6.   

    不是的,我现在的情况是这样的:我在初始化的时候,先把服务器信息插入到listcontrol中。由于初始化的时候,数据都是正确的,所以就 先   m_listServer.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_FLATSB);
        m_listServer.SetImageList(&m_wndImageList2, LVSIL_SMALL);这样设置。让列表中所有的服务器信息都显示一个正确的图标。当程序在运行的过程中,可能会发现某条记录有问题,右击-->屏蔽服务器 这样就把这个服务器给屏蔽了,于是,我要把这个被屏蔽的服务器的图标改成一个错误的图标信息。
      

  7.   

      LVITEM item;  
      item.iImage = 2; 
      item.iItem = m_nItem; //m_nItem为右击时得到的行数
    item.iSubItem = 0;
      m_listServer.SetItem(&item);
    通过这种方法来设置指定行为错误的图标,结果却是整个list都变成了相同的错误图标。
      

  8.   

    找到解决方法了
    http://hi.baidu.com/zhutas/blog/item/0b707b2fcebb60361f3089b6.html结贴,散分