我的问题是这样引出的:为了美观,把一个CListBox设置了排序属性(Sort).我有一个CPtrArray存放一组结构的信息.而列表框一行一行地显示这个结构内容,有一个函数来作从结构到列表框显示项(字符串)的变换.初始时,列表框的内容完全地反映了这组结构的内容(但次序不一样了).
这样,用户选择列表框的一项,点删除,我应该又删除列表框的当前项又删除结构数组的对应项.这时问题出现了.列表框倒是好说,删就删了用DeleteString(m_lbxxx.GetCurSel()), 但我怎么知道列表框的当前项对应结构数组的哪一项?我曾尝试用setitemdata和getitemdata但让我气愤的是这两个函数的参数也是基于列表框的显示出来的索引.而列表框在AddString内部就排了序了,要是有个函数是AddString(LPCTSTR str, DWORD itemdata)就好了....各位,帮帮我,怎么办啊
这样,用户选择列表框的一项,点删除,我应该又删除列表框的当前项又删除结构数组的对应项.这时问题出现了.列表框倒是好说,删就删了用DeleteString(m_lbxxx.GetCurSel()), 但我怎么知道列表框的当前项对应结构数组的哪一项?我曾尝试用setitemdata和getitemdata但让我气愤的是这两个函数的参数也是基于列表框的显示出来的索引.而列表框在AddString内部就排了序了,要是有个函数是AddString(LPCTSTR str, DWORD itemdata)就好了....各位,帮帮我,怎么办啊
dwtemp=m_listbox.GetItemData(nIndex);//从而得到其在CPtrArray中的索引,你删除这个索引号的内容就可以了!
不是啊.你如果不用SetItemData那么这么写返回就是0,可是SetItemData又没有合适的时机写
DWORD m_dwArrIndex;---全局变量
m_dwArrIndex = 0 ;
nIndex=m_listbox.AddString(strFieldValue);
m_listbox.SetItemData(nIndex,m_dwArrIndex);
m_dwArrIndex++;