代码如下:
全局变量定义:
CListCtrl m_cList;
Class_Data d[20]; //Class_Data是我自己定义的结构
设置值
int nTotals = GetData(d); //对d赋值,同时得到元素个数
for(int i=0;i<nTotals;i++) {
  m_cList.InsertString(i,d[i].Name);
  m_cList.SetItemData(i,(DWORD)&d[i]);
}
//到目前为止没有任何问题,我debug发现各个值都正确,SetItemData返回值也正确
取得列表框当前选中的值
DWORD w = m_cList.GetItemData(m_cList.GetCurSel());
Class_Data* pData = (Class_Data *)w;
CString sName = pData->Name;
得到的pData则不正确,不是原先设置的值,希望大侠们出手救救我。

解决方案 »

  1.   

    int index = m_cList.InsertString(i,d[i].Name);
      m_cList.SetItemData(index,(DWORD)&d[i]);
      

  2.   

    1.GetItemData你要確定你所設置的那個ListItem與取的那個ListItem是不是同一條記錄.
    2.GetData是什麼Function?不如按以下編寫:
    for(int i=0;i<sizeof(d)/sizeof(Class_Data);i++)
    {
     m_cList.InsertString(i,d[i].Name);
     m_cList.SetItemData(i,(DWORD)&d[i]);
    }
      

  3.   

    ShiGang的方法我试过了还是不行,GetData是我自己写的一个函数,因为我的列表没有20个,长度不是固定,这个函数测试过没有问题。
      

  4.   

    memset(ch,'\0',20);
    memcpy(ch,"abcdefghijklmnopqrstu",20);
    CString strText;
    for(int i=0;i<20;i++) 
    {
     strText.Format(TEXT("%c"), ch[i]);
         m_clist.InsertItem(LVIF_TEXT|LVIF_STATE, i, strText, 
          (i%2)==0 ? LVIS_SELECTED : 0, LVIS_SELECTED,
          0, 0);
        } for (i=0;i < m_clist.GetItemCount(); i++)
    {
        m_clist.SetItemData(i,ch[i]);
    }InsertString不是CListCtrl的成员函数
      

  5.   

    二楼的是正解
    因为你的List可能排序了,int index = m_cList.InsertString(i,d[i].Name)中,插入后,index的值很可能跟i不一样,所以应该对index使用SetItemData()当然如果你后来自己有对List进行了排序的话,这个方法依然不行,你得自己取到排序前和排序后的映射,使得setitemdata和getitemdata能对应上