搜索

在VB的ListView控件中动态加载记录

gecimao 发表于 2019-04-23 09:05 | 查看: | 回复:

  在访问数据库时,经常会遇到记录数量过多,对数据列表进行初始化时耗费大量时间,使用户在进入界面时等待时间过长。为了解决这个问题,我们可以通过使用动态加载数据的方法来实现。

  即当进行初始化时,只是加载少量的数据,使控件快速完成初始化,让用户在较短的时间内得到控制权,这时加载数据的多少可以根据实际情况进行设定;然后,当用户滚动视图的时候,我们检测其滚动的位置,判断是否需要继续加载数据,如果尚未显示的数据数量少于约定值,则继续加载一定量的数据,否则不作任何动作。这样一来,既可以实现所有数据的加载,又不影响用户的操作。

  其实这种方法在VC中很容易实现,我们只要相应相应列表的WM_VSCROLL就可以了,但是在VB中,列表控件不直接支持这个消息,这就需要我们做一些额外的工作,以实现这一过程。我们似乎可以使用计时器控件定期对列表状态进行监视,从而实现改过程,但是这种方法不但影响系统运行速度,而且效果也不是很好,所以在这里我们仍然使用响应WM_VSCROLL消息的方法。

  为了实现这一功能,首先是在VB中处理列表控件的消息。由于VB中无法直接处理我们所需要的消息,在这里我们就要用到一个API函数将列表控件的消息处理过程设置为我们自己定义的函数。这个API就是SetWindowLong,它的原型是

  nIndex 是要设置项目的索引,在这段程序里我们将其取值为GWL_WNDPROC

  dwNewLong 是要设置项目的值,在这段程序里就是我们自定义的消息处理函数的地址

  它的返回值是一个长整数,是调用这个API之前对应项目的值,如果设置失败,则返回0,对于具体的错误信息可以调用GetLastError来获得,在这里它将返回原始的列表控件的消息处理函数的地址。

  这个函数中使用了LoadDataFunc对数据进行加载,它是一个自定义的函数,第一个参数是数据加载的起始位置(第n条记录),第二个参数是要加载数据(记录)的数量。这个函数可以根据自己的实际情况定义,这里只是我使用的形式。另外,需要注意的是这个消息处理函数必须定义在模块中,而不能定义在窗体中。

  其中,XXXListView.hWnd是列表控件的窗口句柄,这个属性是一个隐藏属性,虽然看不到,但是可以正常使用;我们使用AddressOf取得了我们自定义消息处理函数的地址。g_OldProc是一个全局变量,用来保存原始的消息处理函数地址。

  在这种处理方法中,最关键的就是实现对窗口消息的自定义处理,所以我们使用了VB中不提倡使用的指针,虽然不提倡在VB中使用指针,但合理地使用指针将对功能的实现具有很大的帮助。这里只介绍了利用自定义消息处理函数动态加载数据的一种方法,其实也可以将这种方法应用到其它方面,从而加强程序的功能,提高程序的效率。

  * 网友发言均非本站立场,本站不在评论栏推荐任何网店、经销商,谨防上当受骗!

  更多

  【喂你播】特斯拉回应自燃;支付宝蚂蚁森林用户突破5亿 总面积近140万亩

  尼康首枚Z卡口标变大三元 尼克尔 Z 24-70mm f/2.8 S评测

  OPPO Reno 10倍变焦版发售日期确认:5月10日正式发售 3999元起

  尼康首枚Z卡口标变大三元 尼克尔 Z 24-70mm f/2.8 S评测

  尼康推出一款防水防震、富有乐趣的轻便型数码相机COOLPIX W150

本文链接:http://jonnutting.com/dongtaikongjian/237.html
随机为您推荐歌词

联系我们 | 关于我们 | 网友投稿 | 版权声明 | 广告服务 | 站点统计 | 网站地图

版权声明:本站资源均来自互联网,如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

Copyright @ 2012-2013 织梦猫 版权所有  Powered by Dedecms 5.7
渝ICP备10013703号  

回顶部