虚拟列表使用

yinghiuan 2014-12-08 11:08:09
最近再做一个软件,显示接收的数据,数据量比较大,使用虚拟列表我。根据网上教程,实现了以下代码,发现通过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);
}
}
}

...全文
187 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
向立天 2015-01-09
  • 打赏
  • 举报
回复
您好 我是本版版主 此帖已多日无人关注 请您及时结帖 如您认为问题没有解决可按无满意结帖处理 另外本版设置了疑难问题汇总帖 并已在版面置顶 相关规定其帖子中有说明 您可以根据规定提交您帖子的链接 如您目前不想结帖只需回帖说明 我们会删除此结帖通知 见此回复三日内无回应 我们将强制结帖 相关规定详见界面界面版关于版主结帖工作的具体办法
yinghiuan 2014-12-09
  • 打赏
  • 举报
回复
能具体点吗?
hhhh63 2014-12-09
  • 打赏
  • 举报
回复
我记得有两个函数,一个开始更新,一个结束更新,应该就不闪了。

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧