我的程序由于需要往列表控件 插入的数据量比较大,所以用到了虚拟列表.
但是用虚拟列表的问题来了:
我想把数据分几次插入到列表中,但是一调用 m_list.SetItemCount() 时就把以前的数据也覆盖了.
现在我想的事情是  每次调用 m_list.SetItemCount() ,插入数据时,直接在列表最底部插入,而不覆盖以前的数据.
void CTextSearchDlg::OnGetdispinfoList(NMHDR* pNMHDR, LRESULT* pResult) 
{
LV_DISPINFO* pDispInfo = (LV_DISPINFO*)pNMHDR;
// TODO: Add your control notification handler code here
LV_ITEM* pItem= &(pDispInfo)->item;
int itemid = pItem->iItem;

if (pItem->mask & LVIF_TEXT)
{
CString text;
if (pItem->iSubItem == 0)
{
text=m_Path;
}
else if (pItem->iSubItem == 1)
{
text=(result[itemid]).c_str();
}
lstrcpyn(pItem->pszText,text,pItem->cchTextMax);
}
*pResult = 0;
}
这是我的OnGetdispinfoList 消息响应函数.  请各位同仁帮忙想想办法.

解决方案 »

  1.   

    你大概误解了virtual list control的用法,它只是负责显示,数据的插入和管理和list control wnd部分无关。写好这个OnGetdispinfoList函数后,只需要把你的数据放进数据容器,然后调用setitemcount通知数据行数即可。其他的都交给OnGetdispinfoList函数解析数据显示。不存在你所谓的插入列表问题。
      

  2.   

    楼上的意思是说  我只能在OnGetdispinfoList 里面把数据进行解析?  不能在外部进行?
      

  3.   

    OnGetdispinfoList里面也不用解析数据,这个是通知你需要把某个单元格的数据格式化成LVITEM格式