虚拟列表使用
最近再做一个软件,显示接收的数据,数据量比较大,使用虚拟列表我。根据网上教程,实现了以下代码,发现通过10毫秒更新数据还是会闪烁,希望大家帮忙看看问题所在,或者提出更好的方法。
初始化:
// TODO: 在此添加额外的初始化代码
DWORD dwStyle = m_listctl.GetExtendedStyle();
dwStyle |= LVS_EX_FULLROWSELECT;//选中某行使整行高亮(只适用与report风格的listctrl)
dwStyle |= LVS_EX_DOUBLEBUFFER;
//dwStyle |= LVS_EX_GRIDLINES;//网格线(只适用与report风格的listctrl)
dwStyle |= LVS_EX_CHECKBOXES;//item前生成checkbox控件
m_listctl.SetExtendedStyle(dwStyle); //设置扩展风格
m_listctl.InsertColumn(0,"名称");
m_listctl.InsertColumn(1,"数值");
SetTimer(0,10,NULL);
m_listctl.SetItemCount(20);
定时:
count++;
m_listctl.SetItemCountEx(20, LVSICF_NOINVALIDATEALL);
m_listctl.UnlockWindowUpdate();
数据更新:
void CVirtualListDlg::OnLvnGetdispinfoList1(NMHDR *pNMHDR, LRESULT *pResult)
{
NMLVDISPINFO *pDispInfo = reinterpret_cast<NMLVDISPINFO*>(pNMHDR);
// TODO: 在此添加控件通知处理程序代码
*pResult = 0;
LV_ITEM* pItem= &(pDispInfo)->item;
pItem->mask |= LVIF_STATE;
pItem->stateMask = LVIS_STATEIMAGEMASK;
int iItemIndx= pItem->iItem;
CString temp;
if (pItem->mask & LVIF_TEXT)
{
if(pItem->iSubItem==1)
{
temp.Format("%d",count);
lstrcpy(pItem->pszText, temp);
}
}
}