代码如下:
全局变量定义:
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则不正确,不是原先设置的值,希望大侠们出手救救我。
全局变量定义:
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则不正确,不是原先设置的值,希望大侠们出手救救我。
m_cList.SetItemData(index,(DWORD)&d[i]);
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]);
}
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的成员函数
因为你的List可能排序了,int index = m_cList.InsertString(i,d[i].Name)中,插入后,index的值很可能跟i不一样,所以应该对index使用SetItemData()当然如果你后来自己有对List进行了排序的话,这个方法依然不行,你得自己取到排序前和排序后的映射,使得setitemdata和getitemdata能对应上