100万行ListView

时间:2017-06-27 21:59:24

标签: windows listview user-interface winapi syslistview32

我有一个SysListView32,它应该可以容纳数百万行,并且三列文本A,B,C各自< 256个字符。

假设列B有很多次重复(例如:列A是文件名,列B是路径,每行是文件系统的文件),并且只有100k不同的值(而不是几百万)。

是否可以避免ListView GUI元素B列内容的RAM重复?

我们可以只用指针ListView填充到数组元素(取自B列不同值的100k元素数组),而不是重复数据吗?

如何修改它以使其有效?

LV_ITEM item;
item.mask = LVIF_TEXT;
item.pszText = "Hello";
...
ListView_SetItem(hList, &item);

1 个答案:

答案 0 :(得分:0)

您需要的内容也称为“虚拟列表”。虚拟列表控件是具有LVS_OWNERDATA样式的列表视图控件。此样式使控件能够支持最多DWORD项目(默认项目计数仅扩展为int)。但是,这种风格提供的最大优势是能够在任何时候只在内存中包含一部分数据项。这允许虚拟列表视图控件适合与大型信息数据库一起使用,其中已经存在访问数据的特定方法。对于给定的数据集(列表或动态数组),您需要执行以下步骤:

  1. 将LVS_OWNERDATA样式添加到ListView
  2. 调用CListCtrl :: SetItemCount传递数据源大小,如std :: vector :: size()。
  3. 抓住LVN_GETDISPINFO通知。这是将数据呈现到ListCtrl中的位置。
  4. 请查看我添加的附加链接,了解更多信息和示例代码。如果您使用CListView,则可以使用GetListCtrl访问CListCtrl。

    链接:

    Virtual List Controls

    Using virtual lists