ClistCtr虚拟列表

ClistCtr虚拟列表VC/MFC虚拟列表控件2022-10-0719:12一、什么是虚拟列表控件虚拟列表控件是指带有LVS_OWNERDATA风格得列表控件。二、为什么使用虚拟列表控件我们知道,通常使用列表控件CListCtrl,需要调用InsertItem把要显示得数据插入列表中,之后我们就不必关心数据在哪里了,这是因为控件自己开辟了内存空间来保存这些数据。现在假设我们要显示一个数据库,里面得信息量很大,有几十万条记录。通常有两种方式解决这个问题:1是仅仅在ListCtrl中插入少量得数据,比如100个,然后通过上一页下一页两个按钮进行控制,某一时刻显示得只是从xxx到xxx+100之间得记录。2是把所有数据。全部插入到ListCtrl中,然后让用户通过滚动来查看数据。无疑,很多用户喜欢采用第二种方法,特别是对于已经排序得数据,用户只需用键盘输入某行得开头字符,就可以快速定位到某一行。但是,如果这样做,InsertItem插入数据得过程将是很漫长得,而且用户会看到ListCtrl刷新速度也很慢,而且所有数据都位于内存中消耗了大量得内存当数据多达上万以后几乎是不能忍受得。为此,mfc特别提供了虚拟列表得支持。一个虚拟列表看起来和普通得ListCtrl一样,但是不用通过InsertItem来插入数据,它仅仅知道自己应该显示多少数据。但是它如何知道要显示什么数据呢?秘密就在于当列表控件需要显示某个数据得。时候,它向父窗口要。假设这个列表控件包含100个元素,第10到20个元---本文来源于网络,仅供参考,勿照抄,如有侵权请联系删除---素(行)是可见得。当列表控件重画得时候,它首先请求父窗口给它第10个元素得数据,父窗口收到请求以后,把数据信息填充到列表提供得一个结构中,列表就可以用来显示了,显示第10个数据后,列表会继续请求下一个数据。在虚拟得样式下,ListCtrl可以支持多达DWORD个数据项。(缺省得listctrl控件最多支持int个数据项)。但是,虚拟列表得最大优点不在于此,而是它仅仅需要在内存中保持极少量得数据,从而加快了显示得速度。所以,在使用列表控件显示一个很大得数据库得情况下,采用虚拟列表最好不过了。不仅CListCtrl提供虚拟列表。得功能,MFC得CListView类也有同样得功能。三、虚拟列表控件得消息虚拟列表总共发送三个消息给父窗口:当它需要数据得时候,它发送LVN_GETDISPINFO消息。这是最重要得消息。当用户试图查找某个元素得时候,它发送LVN_ODFINDITEM消息;还有一个消息是LVN_ODCACHEHINT,用来缓冲数据,基本上很少用到这个消息。虚拟列表控件使用起来非常简单。它总共只有三个相关得消息,如果你直接使用CListCtrl,应该在对话框中响应这三个消息。如果你使用CListCtrl派生类,可以在派生类中响应这三个消息得反射消息。这三个消息分别是:(1)LVN_GETDISPINFO控件。请求某个数据(2)LVN_ODFINDITEM查找某个数据(3)LVN_ODCACHEHINT缓冲某一部分数据我们必须响应得消息是(1),多数情况下要响应(2),极少数得情况下需要响应(3)四、如何使用虚拟列表控件首先要创建控件,创建一个虚拟列表和创建一个正常得CListCtrl差不多。先在资源编辑器里面添加一个listcontrol资源。然后选中Ownerdata属性,然后给它捆绑一个CListCtrl变量。添加列,添加imagelist等都和使用正常得listctrl---本文来源于网络,仅供参考,勿照抄,如有侵权请联系删除---一样。给虚拟列表添加元素。假设m_list是这个列表得控制变量。通常得情况下这样添加数据:m_list。.InsertItem(0,_T(Helloworld);但是对于虚拟列表,不能这么做。只需告诉列表有多少个数据:/总共显示100行m_list.SetItemCount(100);处理它得通知消息。五、如何响应虚拟列表得消息处理LVN_GETDISPINFO通知消息当虚拟列表控件需要某个数据得时候,它给父窗口发送一个LVN_GETDISPINFO通知消息,表示请求某个数据。因此列表得所有者窗口(或者它自己)必须处理这个消息。例如派生类得情况(CMyListCtrl是一个虚拟列表类对象):/这里处理得是反射消息BEGIN_MESSAGE_MAP(CMyListCtrl,C。ListCtrl)/AFX_MSG_MAP(CMyListCtrl)ON_NOTIFY_REFLECT(LVN_GETDISPINFO,OnGetdispinfo)/AFX_MSG_MAPEND_MES...

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供参考,付费前请自行鉴别。
3、如文档内容存在侵犯商业秘密、侵犯著作权等,请点击“举报”。

常见问题具体如下:

1、问:已经付过费的文档可以多次下载吗?

      答:可以。登陆您已经付过费的账号,付过费的文档可以免费进行多次下载。

2、问:已经付过费的文档不知下载到什么地方去了?

     答:电脑端-浏览器下载列表里可以找到;手机端-文件管理或下载里可以找到。

            如以上两种方式都没有找到,请提供您的交易单号或截图及接收文档的邮箱等有效信息,发送到客服邮箱,客服经核实后,会将您已经付过费的文档即时发到您邮箱。

注:微信交易号是以“420000”开头的28位数字;

       支付宝交易号是以“2024XXXX”交易日期开头的28位数字。

客服邮箱:

biganzikefu@outlook.com

所有的文档都被视为“模板”,用于写作参考,下载前须认真查看,确认无误后再购买;

文档大部份都是可以预览的,笔杆子文库无法对文档的真实性、完整性、准确性以及专业性等问题提供审核和保证,请慎重购买;

文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为依据;

如果您还有什么不清楚的或需要我们协助,可以联系客服邮箱:

biganzikefu@outlook.com

常见问题具体如下:

1、问:已经付过费的文档可以多次下载吗?

      答:可以。登陆您已经付过费的账号,付过费的文档可以免费进行多次下载。

2、问:已经付过费的文档不知下载到什么地方去了?

     答:电脑端-浏览器下载列表里可以找到;手机端-文件管理或下载里可以找到。

            如以上两种方式都没有找到,请提供您的交易单号或截图及接收文档的邮箱等有效信息,发送到客服邮箱,客服经核实后,会将您已经付过费的文档即时发到您邮箱。

注:微信交易号是以“420000”开头的28位数字;

       支付宝交易号是以“2024XXXX”交易日期开头的28位数字。

文秘专家
机构认证
内容提供者

1

确认删除?