MFC 虚拟列表控件的使用方法
来源:互联网 发布:windows repair win10 编辑:程序博客网 时间:2024/04/30 22:13
问题:软件需要从网络上每次获取一个10000byte的数据包,并通过列表实时显示出来。列表有两列,除去表头,有10000行。开始用MFC自带的ListCtrl控件,每次获得10000个的数据显示的时候刷新需要很长时间,显示很慢。
解决方法:使用虚拟列表。
具体步骤:
1.将ListCtrl控件的OwnerData属性从默认的FALSE改为TRUE;(我的理解是为TRUE的话,数据由系统维护而不是列表控件维护,不理解这个也不影响后面的进程);
2.定义一个全局的CString[10000]的数组,当接收数据线程收到一包数据之后,将数据格式化为字符串存入该数组;
3.为ListCtrl控件添加一个CListCtrl类的变量m_list_FBG;
4.为ListCtrl控件添加消息LVN_GETDISPINFO
5.编辑LVN_GETDISPINFO消息响应函数
void CDialogFirstPage::OnLvnGetdispinfoList(NMHDR *pNMHDR, LRESULT *pResult)
{
//NMLVDISPINFO *pDispInfo = reinterpret_cast<NMLVDISPINFO*>(pNMHDR);
// TODO: 在此添加控件通知处理程序代码
LV_DISPINFO* pDispInfo = (LV_DISPINFO*)pNMHDR;
LV_ITEM* pItem= &(pDispInfo)->item;
int iItemIndx= pItem->iItem;//获取行号,会自动根据当前显示区的行数,更新所有的行
if( pItem->mask&LVIF_TEXT ) {//字符串缓冲区有效
CString temp;
switch( pItem->iSubItem //列号) {
case 0:
temp.Format(_T("FBG%d"),m_tList[iItemIndx].idex);
lstrcpy( pItem->pszText,temp);
break;
case 1:
lstrcpy( pItem->pszText, m_tList[iItemIndx].value);
break;
//case 2:
//lstrcpy( pItem->pszText, m_tlist[iItemIndx].description );
}
}
m_list_FBG.SetItemCountEx(10000);
m_list_FBG.Invalidate();//此处表示每更新一行,就把列表设为无效,然后列表就会重绘,可以根据显示的要求,将这句放在定时器的响应函数里响应
}
5.问题成功解决,显示很流畅。
- MFC 虚拟列表控件的使用方法
- 控件CCtrlList的虚拟列表使用方法--详解
- MFC列表控件CListCtr使用方法
- [VC/MFC]虚拟列表控件——显示上百万数据的列表控件
- [VC/MFC]虚拟列表控件——显示上百万数据的列表控件
- MFC控件的使用方法
- MFC控件的使用方法
- MFC下拉列表框(Combox)控件使用方法
- 虚拟列表控件的使用
- CListCtrl控件的虚拟列表
- 列表视控件的使用方法
- CListCtrl 列表控件的使用方法
- MFC ImageList控件的使用方法
- MFC ScrollBar控件的使用方法
- MFC radio控件的使用方法
- MFC中常用的虚拟键位列表
- MFC 列表控件的使用
- MFC列表控件的使用
- eclipse Package的设置
- Java NIO系列教程(一) Java NIO 概述
- apache与php配置
- vijos P1680距离
- 堆内存和栈内存详解
- MFC 虚拟列表控件的使用方法
- 地址重写 No input file specified的解决方法
- SVN failed to start 解决方案
- MySQL5.6 触发器的使用(条件分支、变量的使用)
- minicom的安装与配置
- Java NIO系列教程(二) Channel
- 山澤損
- I2C驱动总共分为三层
- vs2008下编译gh0st ,dxtrans.h文件不能找到