导航

<2004年12月>
2829301234
567891011
12131415161718
19202122232425
2627282930311
2345678

随笔分类

随笔档案

文章档案

相册

    用一个 CListCtrl 显示数据库的记录内容,共需要显示100多万条。使用 CListCtrl 的虚拟窗口功能后,完成任务。但有“小”问题,就是当执行菜单“全部选择”的功能时,由于记录条目太多了,导致频繁调用函数SetItemSate(),执行太慢了(大约5分钟)。怎么改进那?

    发现用键盘(HOME, Shift + END)实现全部选择的功能,效果很好,速度很快。于是我用程序调用函数 keybd_event()模拟这个功能。效果不错,哈哈~~~~

    测试人员报告:“有的计算机上,这个功能很好;有的计算机上根本就不执行”。啊?于是开始除“虫”。...... 终于找到问题啦,原来使用不同品牌的键盘,其默认的 NUM LOCK 状态不一样,导致模拟键盘动作 HOME,SHIFT + END 没有正常执行。于是,在程序中增加了函数调用 GetKeyState()进行NUM键盘状态的判断。效果不错,哈哈~~~~

    测试人员报告:“用菜单命令执行,这个功能很好;用Ctrl + A加速键执行(为方便用户使用,这个加速键对应菜单的命令)有的时候好用,有的时候不好用,BUG出现的很随机”。啊?于是开始除“虫”。...... 咋找呀?这么个随机的BUG。......哈,我猜到啦~~~~。在用加速键执行的时候,有可能操作人的手指还没有离开 Ctrl 键那,于是导致执行的不是 HOME,而是Ctrl+Home,不是Shift + End,而是Ctrl + Shift + End,My god!!!没完没了的 BUG ,与大家分享。下面是改进后的代码。

cList.SetFocus();
DWORD nCount = cList.GetItemCount();
if(::GetKeyState(VK_NUMLOCK) & 1)
{
 keybd_event(VK_NUMLOCK,0,0,0);
 keybd_event(VK_NUMLOCK,0,KEYEVENTF_KEYUP,0);
}
if(::GetKeyState(VK_CONTROL) & 1)
{
 keybd_event(VK_CONTROL,0,0,0);
 keybd_event(VK_CONTROL,0,KEYEVENTF_KEYUP,0);
}
keybd_event(VK_HOME, 0, 0 ,0);
keybd_event(VK_HOME, 0, KEYEVENTF_KEYUP,0);
int nItem = -1;
POSITION pos=cList.GetFirstSelectedItemPosition();
if(pos) nItem=cList.GetNextSelectedItem(pos);
if(0 != nItem)
{
 if(::GetKeyState(VK_CONTROL) & 1)
 {
  keybd_event(VK_CONTROL,0,0,0);
  keybd_event(VK_CONTROL,0,KEYEVENTF_KEYUP,0);
 }
 keybd_event(VK_HOME, 0, 0 ,0);
 keybd_event(VK_HOME, 0, KEYEVENTF_KEYUP,0);
}
keybd_event(VK_LSHIFT, 0, 0 ,0);
keybd_event(VK_END,0, 0 ,0);
keybd_event(VK_END, 0, KEYEVENTF_KEYUP,0);
keybd_event(VK_LSHIFT, 0, KEYEVENTF_KEYUP,0);
posted on 2004-12-11 14:03 杨老师的茅屋 阅读(1434) 评论(5)  编辑 收藏
评论
  • # re: 没完没了的BUG之四,与大家分享
    freedk
    Posted @ 2004-12-12 01:02
    捉虫好玩D说
  • # re: 没完没了的BUG之四,与大家分享
    freedk
    Posted @ 2004-12-12 01:05
    Windows NT/2000/XP:This function has been superseded. Use SendInput instead
  • # re: 没完没了的BUG之四,与大家分享
    小刀人
    Posted @ 2004-12-18 21:29
    如此说来,测试人员功不可没,呵呵.
  • # 能发现问题,了不起
    茹枫
    Posted @ 2005-01-16 10:49
    呵呵
  • # re: 没完没了的BUG之四,与大家分享
    ked
    Posted @ 2005-10-10 12:22
    发现用键盘(HOME, Shift + END)实现全部选择的功能,效果很好,速度很快。

    这说明listctrl内部有很高效的选择算法货函数,只是我们没有发现。应该找出这个方法来~
标题  
姓名  
主页
验证码 *
内容   
  登录  使用高级评论  Top
[使用Ctrl+Enter键可以直接提交]

统计