原来用下面CListCtrl的代码显示用户是没问题的
void CListCtrlEx::AddItem(short i, char* name, char* text) 

LVITEM lvi; lvi.mask = LVIF_TEXT | LVIF_IMAGE | LVIF_PARAM; 
lvi.iItem = GetItemCount(); 
    lvi.iImage = i; 
lvi.iSubItem = 0; 
lvi.pszText = name; 
lvi.cchTextMax = 64; 
lvi.lParam = 0; 
InsertItem(&lvi); lvi.mask = LVIF_TEXT; 
lvi.pszText = text; 
lvi.cchTextMax = 32; 
lvi.iSubItem = 1; 
SetItem(&lvi); 

后来我想在显示用户前显示图标,调用和关联代码如下:
m_imglist.Create ( 48, 48, ILC_COLOR16 | ILC_MASK, 4, 1 );
    m_imglist.Add (HICON(::LoadImage (AfxGetResourceHandle(), MAKEINTRESOURCE(IDI_THIS),
                              IMAGE_ICON, 48, 48, LR_DEFAULTCOLOR )));
  this->dlgBar.m_userlist.SetImageList ( &m_imglist, LVSIL_SMALL );this->dlgBar.m_userlist.AddItem(0, pStr->from.GetBuffer(0), pStr->ip.GetBuffer(0)); 
结果登录第一个用户没问题,也可以显示用户图标,但登录第二个用户程序崩溃。为什么?谢谢!!

解决方案 »

  1.   

    第二次登陆的时候又重新调用m_imglist.Create,肯定会出错的。应该先判断。如果还未创建,然后创建,如果已经创建后就不应该创建了
      

  2.   

    用一个Count计数是否有人在线登陆,如果count==0,就m_imglist.Create,否则直接用m_imglist.Add,最后当所有下线的时候要清除内存,可以用zeromemory请零吧。
      

  3.   

    我修改了AddItem方法
    void CListCtrlEx::AddItem(short i, char* name, short j)
    {
    LVITEM lvi; lvi.mask = LVIF_TEXT | LVIF_IMAGE | LVIF_PARAM;
    lvi.iItem = GetItemCount();
        lvi.iImage = i;
    lvi.iSubItem = 0;
    lvi.pszText = name;
    lvi.cchTextMax = 64;
    lvi.lParam = 0;
    InsertItem(&lvi);
    //显示第二列图标
    lvi.mask =  LVIF_IMAGE;
    lvi.iImage = j;
    lvi.iSubItem = 1;
    lvi.cchTextMax = 64;
    SetItem(&lvi);
    }
    然后调用
    m_imglist.Create ( 48, 48, ILC_COLOR16 | ILC_MASK, 4, 1 ); 
        m_imglist.Add (HICON(::LoadImage (AfxGetResourceHandle(), MAKEINTRESOURCE(IDI_THIS), 
                                  IMAGE_ICON, 48, 48, LR_DEFAULTCOLOR ))); 
      m_userlist.SetImageList ( &m_imglist, LVSIL_SMALL ); m_userlist.AddItem(0, pStr->from.GetBuffer(0), 0); 
    结果显示第一列图标,第二列没显示.为什么?谢谢!!