热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

任务管理器开发(一)

  前言:        这个项目是自己肤浅的看了些关于系统的文章后,决定实现一个任务管理器的加强版。现在后悔啊~发现这个任务量实在太大了,差不多两个星期了(星期1到5都晚上时间和

 

 前言:

        这个项目是自己肤浅的看了些关于系统的文章后,决定实现一个任务管理器的加强版。现在后悔啊~发现这个任务量实在太大了,差不多两个星期了(星期1到5都晚上时间和周末都用上了),才把进程管理部分完成了一部分。

        

        期间遇到的问题列出一部分,因为很多我都不太记得了。

 

一、ListCtrl的刷新问题:

        当数据量比较大的时候,更新ListCtrl会出现闪烁,因为每次刷新都DeleteAllItems,然后再一个一个的AddItem、SetItemText。这样大部分的时间都被浪费而且造成了界面的闪烁。

        解决办法:

        1.给ListCtrl设置LVS_EX_DOUBLEBUFFER风格,顾名思义,双缓冲~

        2.在更新ListCtrl的时候使用下面的代码段,可以很大程度上改善闪烁的情况,但也不是完美的。

  1. // 防止闪烁措施
  2. m_wndListApp.SetRedraw(FALSE);
  3. // 更新数据
  4. InsertAppItem();
  5. // 恢复并更新
  6. m_wndListApp.SetRedraw(TRUE);
  7. m_wndListApp.Invalidate();
  8. m_wndListApp.UpdateWindow();

        3.运用虚表,这个具体参见http://www.codeproject.com/KB/list/virtuallist.aspx,或者直接Google吧~噢,在更新虚表的时候建议用SetItemCountEx这个方法吧,因为有个参数是防止更新后滚动条移动到开头LVSICF_NOSCROLL.

        4.派生了个ListCtrl,功能为:禁止点击第一列、点击非第一列的item的时候会弹出Edit控件,即可编辑item。

           派生了个SortCtrl,其实是在CodeProject上找的,不过自己修改了下~

           在显示process信息时,使用了虚表技术,具体察看代码~

        没有解决的问题:

            在正常ListCtrl里,更新数据项后,滚动条不移动这个功能老是实现不了。在网上找了些代码,都不成功,在此我列出一种方法吧,但是没成功~

  1. // 防止闪烁 
  2.     //m_wndListProcess.SetRedraw(FALSE); 
  3.     
  4.     //int nTopIndex =m_wndListProcess.GetTopIndex(); //得到最顶端记录索引 
  5.     //int nPerPageItem=m_wndListProcess.GetCountPerPage(); 
  6.     //m_wndListProcess.EnsureVisible(m_wndListProcess.GetItemCount()-1,FALSE); 
  7.     //m_wndListProcess.EnsureVisible(nTopIndex+nPerPageItem,FALSE); 
  8.     //m_wndListProcess.SetItemCount(m_vecProcessInfo.size()); 
  9.     // 
  10.     // 添加信息 
  11.     //InsertItem(); 
  12.     //m_wndListProcess.SetItemState(m_nCurItem,LVIS_SELECTED, LVIS_SELECTED); 
  13.     //m_wndListProcess.SetRedraw(TRUE); 
  14.     //m_wndListProcess.Invalidate(); 
  15.     //m_wndListProcess.UpdateWindow(); 
  16.     //m_wndListProcess.RedrawItems(nTopIndex,nTopIndex+nPerPageItem);

 

怪!

 

后记   :

        今天就操作ListCtrl的问题总结出来,希望以后也能记住这些经验,改善不足的地方~

        估计明天总结枚举任务栏窗口的事情~

   

还有,明天开始把当天的学习和工作成果记录下来,在纸质的笔记本上记下!

 

 

 


推荐阅读
  • 本文详细介绍了Spring的JdbcTemplate的使用方法,包括执行存储过程、存储函数的call()方法,执行任何SQL语句的execute()方法,单个更新和批量更新的update()和batchUpdate()方法,以及单查和列表查询的query()和queryForXXX()方法。提供了经过测试的API供使用。 ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • Java学习笔记之使用反射+泛型构建通用DAO
    本文介绍了使用反射和泛型构建通用DAO的方法,通过减少代码冗余度来提高开发效率。通过示例说明了如何使用反射和泛型来实现对不同表的相同操作,从而避免重复编写相似的代码。该方法可以在Java学习中起到较大的帮助作用。 ... [详细]
  • 上图是InnoDB存储引擎的结构。1、缓冲池InnoDB存储引擎是基于磁盘存储的,并将其中的记录按照页的方式进行管理。因此可以看作是基于磁盘的数据库系统。在数据库系统中,由于CPU速度 ... [详细]
  • 本文介绍了pack布局管理器在Perl/Tk中的使用方法及注意事项。通过调用pack()方法,可以控制部件在显示窗口中的位置和大小。同时,本文还提到了在使用pack布局管理器时,应注意将部件分组以便在水平和垂直方向上进行堆放。此外,还介绍了使用Frame部件或Toplevel部件来组织部件在窗口内的方法。最后,本文强调了在使用pack布局管理器时,应避免在中间切换到grid布局管理器,以免造成混乱。 ... [详细]
  • OpenMap教程4 – 图层概述
    本文介绍了OpenMap教程4中关于地图图层的内容,包括将ShapeLayer添加到MapBean中的方法,OpenMap支持的图层类型以及使用BufferedLayer创建图像的MapBean。此外,还介绍了Layer背景标志的作用和OMGraphicHandlerLayer的基础层类。 ... [详细]
  • 本文总结了在编写JS代码时,不同浏览器间的兼容性差异,并提供了相应的解决方法。其中包括阻止默认事件的代码示例和猎取兄弟节点的函数。这些方法可以帮助开发者在不同浏览器上实现一致的功能。 ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 本文探讨了C语言中指针的应用与价值,指针在C语言中具有灵活性和可变性,通过指针可以操作系统内存和控制外部I/O端口。文章介绍了指针变量和指针的指向变量的含义和用法,以及判断变量数据类型和指向变量或成员变量的类型的方法。还讨论了指针访问数组元素和下标法数组元素的等价关系,以及指针作为函数参数可以改变主调函数变量的值的特点。此外,文章还提到了指针在动态存储分配、链表创建和相关操作中的应用,以及类成员指针与外部变量的区分方法。通过本文的阐述,读者可以更好地理解和应用C语言中的指针。 ... [详细]
  • 本文介绍了Swing组件的用法,重点讲解了图标接口的定义和创建方法。图标接口用来将图标与各种组件相关联,可以是简单的绘画或使用磁盘上的GIF格式图像。文章详细介绍了图标接口的属性和绘制方法,并给出了一个菱形图标的实现示例。该示例可以配置图标的尺寸、颜色和填充状态。 ... [详细]
  • 基于Socket的多个客户端之间的聊天功能实现方法
    本文介绍了基于Socket的多个客户端之间实现聊天功能的方法,包括服务器端的实现和客户端的实现。服务器端通过每个用户的输出流向特定用户发送消息,而客户端通过输入流接收消息。同时,还介绍了相关的实体类和Socket的基本概念。 ... [详细]
  • MySQL语句大全:创建、授权、查询、修改等【MySQL】的使用方法详解
    本文详细介绍了MySQL语句的使用方法,包括创建用户、授权、查询、修改等操作。通过连接MySQL数据库,可以使用命令创建用户,并指定该用户在哪个主机上可以登录。同时,还可以设置用户的登录密码。通过本文,您可以全面了解MySQL语句的使用方法。 ... [详细]
  • 本文介绍了解决Facebook脸书面试题中插入区间的方法,通过模拟遍历的方式判断当前元素与要插入元素的关系,找到插入点并将新区间插入。同时对算法的时间复杂度和空间复杂度进行了分析。 ... [详细]
  • 合并列值-合并为一列问题需求:createtabletab(Aint,Bint,Cint)inserttabselect1,2,3unionallsel ... [详细]
author-avatar
joechl
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有