【发布时间】:2017-12-01 02:50:31
【问题描述】:
我有一个 SysListView32,它可能会容纳数百万行,以及三列文本 A、B、C,每列
假设 B 列有很多重复(例如:A 列是文件名,B 列是路径,每一行是文件系统的一个文件),并且只有 10 万个不同的值(而不是几百万个)。
是否可以避免ListView GUI 元素的 B 列内容在 RAM 中重复?
我们可以用数组元素(取自 B 列的不同值的 100k 元素数组)的 指针 填充 ListView,而不是重复数据吗?
如何修改它以使其工作?
LV_ITEM item;
item.mask = LVIF_TEXT;
item.pszText = "Hello";
...
ListView_SetItem(hList, &item);
【问题讨论】:
-
@IInspectable 看起来确实很有趣,我读了几次,但我可能需要再读 10 次才能完全理解。也许您认为我们可以找到一个完整的 MSVC++ 玩具项目来演示这一点,其中包含一个真正的具体 ListView 填充行?
-
其实没什么大不了的。您使用
LVS_OWNERDATA样式创建列表视图,将指向原始数据的指针存储在LVITEM.lParam中,并处理LVN_GETDISPINFO消息。 -
我经常这样做。现在您知道要研究什么,您将轻松解决这个问题。
-
@IInspectable
store a pointer to the raw data in LVITEM.lParam这是虚拟列表的错误。它不为项目分配数据,也不存储任何lParam。需要使用NMLVDISPINFO.item.iItem
标签: windows listview user-interface winapi syslistview32