因为想解绝CListCtrl控件显示卡死的问题,看了下虚拟列表是怎么使用的,记录下来,以便日后使用;
首先将CListCtrl控件的属性Owner Data设置为true;
根据列表的数据定义结构体
class CListData
{
public:
CSampleData()
{
sName = _T("");
nCount = 0;
}
int nCount;
CString sName;
};
将数据放入vector容器
vector<CListData> m_database;
CListData data;
data.nCount =1;
data.sName ="数据";
m_database.push_back(data);
添加CListCtrl的LVN_GETDISPINFO消息响应
void CXXXXdlg::OnLvnGetdispinfoSoelist(NMHDR *pNMHDR, LRESULT *pResult)
{
//NMLVDISPINFO *pDispInfo = reinterpret_cast<NMLVDISPINFO*>(pNMHDR);
// TODO: 在此添加控件通知处理程序代码
LV_DISPINFO* pDispInfo = (LV_DISPINFO*)pNMHDR;
LV_ITEM* pItem = &(pDispInfo)->item;
int itemid = pItem->iItem;
if (pItem->mask &LVIF_TEXT)
{
CString text;
if (pItem->iSubItem==0)
{
text.Format(_T("%d"), m_database[itemid].nCount);
}
else if (pItem->iSubItem==1)
{
text = m_database[itemid].sName;
}
lstrcpyn(pItem->pszText,text,pItem->cchTextMax);
}
*pResult = 0;