当前位置: 网学 > 编程文档 > VB > 正文

用API函数改进ListView控件的显示效果

来源:Http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 12/10/16
下载{$ArticleTitle}原创论文样式

王建兵

ListView使用简介
  ListView控件是vb开发者非常喜爱的控件之一。作为Windows95公共控件组(COMCTL32.OCX) 的成员,它经常与经常与TreeView、ImageList等控件联合使用。即用TreeView显示一个的树 型结构,而用ListView显示选中的节点(Node)对象的记录
集。
  这是笔者在开发财务软件项目中的$#@60;$#@60;凭证管理$#@62;$#@62;模块的一个用户界 面。屏幕左边是一个TreeView控件,用来显示会计凭证的类别;右边是一个istView,用来显示 对应类别的凭证目录;上方是一个菜单条控件(MenuBar)和一个工具条控件(ToolBar);下方是 一个状态栏控件(StatusBar),用来显示凭证数个当前日期。

  大家可以看到图中所 示的界面非常类似于Window95/98的资源浏览器,Windows的界面风格做为一种标准已为广大 用户所接受。而Windows操作系统的主要的优点就是为所有的应用程序提供了公用的界面。知道 如何使用基于Windows的应用程序的用户,很容易学会使用其他应用程序

  这种使 用Windows95公共控件组合的方法能够达到与Windows界面的一致性,所以在目前VB5.0应用 程序的开发中经常使用。

二、填充大量结果集所遇到的问题
  在实际应用开发中,经常用ListView填充一个数据库结果集(Recordset)的内容。即先写 一段SQL查询语句,产生一个结果集,然后将结果集的每一条记录用DOLOOP循环语句中填到ListView 中。

  但是当结果集很大时(例如有5000条以上的记录),填充所需要的时间会很长。 用户不得不等很长时间完成一个查询。所以在查询的过程中必须允许用户按Escape键退出。具 体做法是在DOLOOP循环体中加一条DoEvents函数,并写一段中断退出程序代码。

   DoEvents函数的功能是:转让控制权,以便让操作系统处理其它的事件。这样在长时间的查询 过程中,如果用户按了Escape键,将退出循环体,结束查询过程。

  但是这样又会引 发另外一个问题:由于DoEvents可以让操作系统响应别的事件,循环体中填充每一条ListView 项目(ListItem)的过程也会显示出来,所以在填充的过程中屏幕会不停的闪动,这种现象当然 不能被用户所接受。如何解决这个问题呢?

三、解决方案
  用WindowsAPI函数可以解决这个问题。首先对几个用到的API函数做一解释和说明。

   1.GetClientRectLib"user32"(ByValhwndAsLong,lpRectAsRECT)As Long

  此函数的功能是获得一个指定对象窗 Window)的矩型框区域(rectangle)。

   Hwnd为指定对象或窗体的句柄。LpRect为返回矩型框的结构(必须定义为结构类型的变量)。

   2.ValidateRectLib"user32"(ByValhwndAsLong,lpRectAsRECT)As Long

  此函数的功能是使指定的矩型区域生效。这样会通知Windows不必对指定 的区域进行重画(Redraw)。

  3.InvalidateRectLib"user32"(ByVal hwndAsLong,lpRectAsRECT,ByValbEraseAsLong)AsLong

  此函数的 功能是使指定的矩型区域无效。这样会通知Windows要对指定的区域进行重画。

   具体实现的步骤如下:

  1.在填充结果集之前先用GetClientRect函数获得ListView的 显示区域。

  2.在增加完一个显示项目(ListItem)后用ValidateRect函数置这一 区域为有效。这样Windows就不会显示每一条ListItem,屏幕闪动的现象就会消失。

   3.在填充结果集之后,用InvalidateRect函数置这一区域为无效。这样Windows就会重画ListView 的内容,结果集被完整的显示出来。

  下面是笔者在项目开发中的一个程序实例。程 序名为FillListView。该程序将填写一个Access数据库(FISCAL.MDB)的凭证表(Table)的内容 到ListView中。

  首先进入VB5.0,新建一个窗体(Form),名为Form1。

   然后在Form中增加下列控件。


控件名Name

ListViewLvw

Imagel
  • 上一篇资讯: 使用Win95的动画光标
  • 网学推荐

    免费论文

    原创论文

    浏览:
    设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
    版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
    Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved
    湘ICP备09003080号