MFC 虚拟列表控件的使用方法

 

问题:软件需要从网络上每次获取一个10000byte的数据包,并通过列表实时显示出来。列表有两列,除去表头,有10000行。开始用MFC自带的ListCtrl控件,每次获得10000个的数据显示的时候刷新需要很长时间,显示很慢。

解决方法:使用虚拟列表。

具体步骤:

1.将ListCtrl控件的OwnerData属性从默认的FALSE改为TRUE;(我的理解是为TRUE的话,数据由系统维护而不是列表控件维护,不理解这个也不影响后面的进程);

2.定义一个全局的CString[10000]的数组,当接收数据线程收到一包数据之后,将数据格式化为字符串存入该数组;

3.为ListCtrl控件添加一个CListCtrl类的变量m_list_FBG;

4.为ListCtrl控件添加消息LVN_GETDISPINFO

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
MFC 中的虚拟列表(Virtual List)是一种特殊的列表控件,它可以处理大量数据并提高列表的效率和性能。与普通的列表控件不同,虚拟列表只在需要显示时才加载数据,而不是在初始化时就全部加载。这样可以减少内存占用和提高响应速度,特别适合处理大量数据的场景。 在 MFC 中,可以通过 CListCtrl 类的 SetItemCount() 方法设置列表的项数,然后使用 OnGetDispInfo() 方法来获取需要显示的数据。具体步骤如下: 1. 创建虚拟列表控件,并将其风格设置为`LVS_OWNERDATA`。 2. 在初始化过程中,使用`SetItemCount()`方法设置列表的项数,该方法会触发`OnGetDispInfo()`方法。 3. 在`OnGetDispInfo()`方法中,根据需要显示的项和列,获取相应的数据并设置到`LVITEM`结构体中。 4. 在需要更新列表时,调用`Invalidate()`方法强制刷新列表。 下面是示例代码: ```c++ // 设置列表项数 m_listCtrl.SetItemCount(nCount); // 获取需要显示的数据 void CMyDlg::OnGetDispInfo(NMHDR* pNMHDR, LRESULT* pResult) { NMLVDISPINFO* pDispInfo = reinterpret_cast<NMLVDISPINFO*>(pNMHDR); LVITEM& item = pDispInfo->item; // 获取需要显示的数据,并设置到 LVITEM 结构体中 item.mask = LVIF_TEXT; item.iItem = pDispInfo->item.iItem; item.iSubItem = pDispInfo->item.iSubItem; item.pszText = "Data to display"; *pResult = 0; } // 更新列表 m_listCtrl.Invalidate(); ``` 需要注意的是,虚拟列表使用需要结合具体的业务场景和数据量来评估和优化性能。在处理大量数据时,可以采用分页、延迟加载等技术来提高效率和响应速度。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值