首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >虚拟列表控件(MFC)

虚拟列表控件(MFC)
EN

Stack Overflow用户
提问于 2008-10-09 14:06:40
回答 4查看 3.3K关注 0票数 1

我使用列表控件来显示向量中元素的表示形式。当单击列表时,另一个控件会显示有关该元素的信息。元素的索引当前由它在控件中的索引确定,但是,如果我希望对结果进行排序或过滤,这将不再起作用。

有人告诉我可以使用虚拟列表控件,但MSDN不是很友好,有人能告诉我如何使用虚拟列表控件吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2008-10-09 14:28:19

坦率地说,将数据(数据向量中的位置)绑定到列表控件中的数据表示(列表ctrl中的位置)是我不会去做的事情。

在MFC中,每个控件都有一个"Data“DWORD成员变量--在MFC中编码时,我总是为添加的每一项调用"SetItemData”,并将其传递给相关行引用的指针,例如YourListCtrl.SetItemData((DWORDPTR)&YourData);

然后,当选择ListCtrl项时,您只需调用

DataTypeYouWant* pData = (DataTypeYouWant*)(YourListCtrl.GetItemData(indexofselecteditem));

或者诸如此类的事情。

或者-如果您不想使用指针-在行的itemdata中保留原始向量中项目的索引(只需将其传递到上面的fns中)。

票数 5
EN

Stack Overflow用户

发布于 2008-10-09 14:59:16

若要使用虚拟列表控件,请设置LVS_OWNERDATA样式。然后,您需要处理(通过WM_NOTIFY发送的) LVN_GETDISPINFO通知消息。

如果这样做,您将完全对数据负责,包括数据的显示顺序。因此,要由您来处理排序等问题。

到目前为止,最简单的方法是使用项数据来设置/获取一个ID,该ID可用于检索原始数据,无论是向量索引还是指向数据的指针,甚至是关联容器中的键。

票数 1
EN

Stack Overflow用户

发布于 2008-10-09 15:21:13

这真的取决于你所需要的性能。

我个人已经看到,拥有大量数据的列表的性能有了很大的提高。然而,这是更多的工作来实现,因此,对于简单的使用没有太多的数据,我建议远离它。

基本上,使用虚拟列表控件所发生的情况是,您的数据存在于您自己的某个数据结构中。由于列表视图只显示整个数据的一小部分,因此当发生任何事情(必要的重绘、向上或向下滚动、更改排序等)时,它都会询问要显示的内容。

我没有现成的例子供你参考。但是你可以看看codeguru,我很确定有非常好的例子可以开始。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/187421

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档