防止ClistCtrl刷新闪烁的五种方法

关于CListCtrl控件更新Item的闪烁问题和一次插入大容量数据的显示问题解决办法 程序需要从数据库某一个活动表中,定时取数据,更新界面的列表显示,比如有20条数据(变化),则这20数据不停的变化,(通过其他程序实现)方案(1),先在列表中查找,后插入比如每条记录都有一个唯一的编号,查询的时候,首先查找该编号的记录在列表中是否存在,如果存在 则找到Item后,直接更新各个列的数据,如 LVFINDINFO lv; lv.flags=LVFI_STRING; l 阅读详情

程序需要从数据库某一个活动表中,定时取数据,更新界面的列表显示,比如有20条数据(变化),则这20数据

不停的变化,(通过其他程序实现)

方案(1),先在列表中查找,后插入

比如每条记录都有一个唯一的编号,查询的时候,首先查找该编号的记录在列表中是否存在,如果存在 

则找到Item后,直接更新各个列的数据,如

 LVFINDINFO lv;
 lv.flags=LVFI_STRING;
 lv.psz=“关键字”;
 int nItem=m_list.FindItem(&lv,-1); 

如果Item>0则直接更新数据,用SetItemText(nItem,0,“值1”),。。。。

如果Item<0,则插入一条Item,InsertItem(),然后SetItemText(nItem,0,“”);。。。。

方案2:

 每次查询之前,把当前的记录全部删掉,然后在依次插入到列表框中。

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////其他方法

//方法1:采用禁止重绘的方法

   SetWindowRedraw(hwnd, FALSE);
  ... add the items ...
SetWindowRedraw(hwnd, TRUE);

方法2:采用锁定窗口,禁止刷新的方法

 m_list.LockWindowUpdate()

m_list.SetItemText()
//修改后
m_list.UnlockWindowUpdate()

方法3:采用虚拟列表技术。

        每次都把数据先放到一个数组中,然后根据显示的多少更新数据。需要LVN_GETDISPINFO消息

即(OnGetdispinfoList(NMHDR* pNMHDR, LRESULT* pResult))函数,

方法 4:使用内存缓冲技术

  虚拟表可以解决,如果数据更新还是大量闪烁,需要进行对OnDraw函数修改,采用memDC可以实现无闪烁方案

  方法5:重载一下OnEraseBkgnd(CDC* pDC)函数

重载一下OnEraseBkgnd(CDC* pDC)函数,在背景中把客户区画成白色的试试;如果不行的话,插入数据的时候计算一下数据区的大小,如果数据区覆盖整个客户区,则不画背景。以前是这么做的,1s更新几十条数据还是看不出闪烁的。

vs2019 c++ 列表视图控件ClistCtrl 更新操作 当要更新列表视图的时候,需要在填入内容之前清空之前的内容: //清空,如果不清空,添加的时候更新的内容会出现在上面,而不是按顺序出现在最后 m_uiList.DeleteAllItems(); 否则就会出现新添加的内容显示在1位置,而不是2位置。 以下是一个简单的自定义视图更新函数,从数据库中读取数据 //更新列表控件 void CclktestDlg::UpdateListCtrl() { //获取数据库指针 CclktestSet* pClkTestSet = Get... 阅读详情

相关推荐

CListrCtrlCL修正版(支持动态设置颜色)

修正的CListCtrlCL类,修改内容如下: 1.支持设置单元格数据类型:int, double(可自定义小数位数) 2.支持设置列表斑马条纹效果 3.修正原版选中行高亮显示不成功的bug 4.增加表头自绘开关 5.在析构函数中增加内存回收代码 6.支持动态设置颜色

MFC CListCtrl 刷新数据时闪屏解决方法

1.使用SetRedraw禁止窗口重绘,操作完成后,再恢复窗口重绘 m_ctlList.SetRedraw(FALSE); //以下为更新数据操作 //…… //恢复窗口重绘 m_ctlList.SetRedraw(TRUE); 2.使用LockWindowUpdate禁止窗口重绘,操作完成后,用UnlockWindowUpdate恢复窗口重绘 m_ctlList.LockWindowUpdat

不经一番寒彻骨,怎得梅花扑鼻香。 8636

clistctrl换肤

clistctrlcl,修改bug,支持动态创建,修复了动态创建出现的问题

CListCtrl更新数据时出现明显的闪烁,要怎么解决呢? - VC/MFC / 界面

C/C++ code // Updating a control or window with large amounts of data may cause // flicker. In such cases it may be better to turn off drawing   //...   //m_list is a member of type CLis

风云爱飞 2657

解决列表框更新数据的时候的闪烁问题(VC防止窗口及其控件(如CListCtrl)闪烁的简单方法(一组有用的宏) )

 VC防止窗口及其控件(如CListCtrl)闪烁的简单方法(一组有用的宏)         本文主要是通过网上一篇文章提供的解决办法,整理了一组宏来实现防闪烁的。本文的重点是展示这个宏及其使用方法。 解决方法的原理请参考: http://www.cndes.cn/Designs/Program/200608052716.html 针对上文中提到的 “有效的进行搽除" 方法整理如下:     

ponydph的专栏 4267

防止CListCtrl 闪烁的几种方法

一: 彻底解决了CListCtrl的闪烁问题.此灵感来自于WindowMediaPlayer SDK 9 方法很简单.如下: 在对话框上加了个静态文本框.并把文本框的样式设为透明.再 用SetParent()函数把CListCtrl的父窗口设为刚加的静态文本框.嘿嘿彻底不闪了... 代码如下: 1在CMyDlg中添加成员  CListCtrl   m_List; 2 BOOL CM

cbNotes的专栏:不积硅步,无以至千里;不积小流,无以成江海! 2320

VC防止窗口及其控件(如CListCtrl)闪烁的简单方法(一组有用的宏)

        本文主要是通过网上一篇文章提供的解决办法,整理了一组宏来实现防闪烁的。本文的重点是展示这个宏及其使用方法。 解决方法的原理请参考: http://www.cndes.cn/Designs/Program/200608052716.html 针对上文中提到的 “有效的进行搽除" 方法整理如下:        原文作者的思路是复写WM_ERASEBKGND消息处理函数OnEraseBk

hf_blueideal的专栏 2039

VC防止窗口和控件闪烁方法

1、将Invalidate()替换为InvalidateRect()  Invalidate()会导致整个窗口的图象重画,需要的时间比较长,而InvalidateRect()仅仅重画Rect区域内的内容,所以所需时间会少一些。虫虫以前很懒,经常为一小块区域的重画就调用Invalidate(),不愿意自己去计算需要重画的Rect,但是事实是,如果你确实需要改善闪烁的情况,计算一个Rect所用的时间比

旅途 889

防止CListCtrl闪烁的几种方法

//…… //恢复窗口重绘 m_ctlList.SetRedraw(TRUE);   2.使用LockWindowUpdate禁止窗口重绘,操作完成后,用UnlockWindowUpdate恢复窗口重绘 m_ctlList.LockWindowUpdate(); //

学而不思则罔 793

解决CListCtrl闪烁及水平滚动条不能跟踪拖动的问题(MFC)

项目中用到一个界面如下图所示,在View上有个CPropertySheet,其上有几个CPropertyPage,每个属性页上有个CListCtrl,供用户查看信息。由于CListCtrl中的信息每隔200ms就要刷新一次,导致这个区域不停的闪烁。同时,由于空间不够,CListCtrl上有个水平滚动条,当我们想拉动滚动条到中间位置查看后面几列数据时,刚拉过去就由于刷新又被拉回起点,导致很难查看后面

茅庐 1万+

combobox 加载Model中查询的数据

1、初始化combobox控件 //生产厂家 $("#manufacturers").combobox({ editable: true, //是否允许输入:允许输入时可以根据输入的内容进行自动查询 panelHeight: 'auto', valueField: 'id', textField: 'name', url: "${pageContext.request.contextPath}/mt/manufacturers/queryNameList", //数据源查询路径 filter

gr_guhun的博客 475

MFC CListCtrl 虚拟列表使用详解

CListCtrl 是MFC 库的一个列表控件,用于显示数据的。可以通过 InsertItem 快速向列表添加一行数据,并且用 SetItemText 设置其后面列的数据项。但是本篇文章重点不是介绍 CListCtrl 控件的基本使用方法,而是介绍 CListCtrl 的扩展功能“虚拟列表”。使用 InsertItem 方法可以显示少量数据,但是数据量大或者是频繁刷新列表数据时,会出现缓慢甚至卡顿的现象。虚拟列表可以很好的解决该问题。1、处理 LVN_GETDISPINFO 消息。

baidu_15765107的博客 6315

MFC控件ClistCtrl闪烁问题,点击表头排序闪烁问题

ListCtrl控件闪烁问题,表格排序闪烁问题

weixin_44148949的博客 870

虚拟列表控件的使用

一、什么是虚拟列表控件虚拟列表控件是指带有LVS_OWNERDATA风格的列表控件。。二、为什么使用虚拟列表控件我们知道,通常使用列表控件CListCtrl,需要调用InsertItem把要显示的数据插入列表中,之后我们就不必关心数据在哪里了,这是因为控件自己开辟了内存空间来保存这些数据。现在假设我们要显示一个数据库,里面的信息量很大,有几十万条记录。通常有两种方法解决这个问题:1是仅

Some Say...And We Know he is called: The Stig! 3073
上一篇: ClistCtrl技巧
下一篇: sprintf函数:sprintf函数详细介绍
aleonchen
博客等级 码龄23年 1粉丝 3原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值