防止CListCtrl 闪烁的几种方法

关于CListCtrl控件更新Item的闪烁问题和一次插入大容量数据的显示问题解决办法 程序需要从数据库某一个活动表中,定时取数据,更新界面的列表显示,比如有20条数据(变化),则这20数据不停的变化,(通过其他程序实现)方案(1),先在列表中查找,后插入比如每条记录都有一个唯一的编号,查询的时候,首先查找该编号的记录在列表中是否存在,如果存在 则找到Item后,直接更新各个列的数据,如 LVFINDINFO lv; lv.flags=LVFI_STRING; l 阅读详情
一:
彻底解决了CListCtrl的闪烁问题.此灵感来自于WindowMediaPlayer SDK 9
方法很简单.如下:
在对话框上加了个静态文本框.并把文本框的样式设为透明.再
用SetParent()函数把CListCtrl的父窗口设为刚加的静态文本框.嘿嘿彻底不闪了...
代码如下:
1在CMyDlg中添加成员  CListCtrl   m_List;
2
BOOL CMyi5Dlg::OnInitDialog()
{

         1.RECT rcRect;
2.CWnd* pParent=GetDlgItem(IDC_STATIC_PARENT);
3.pParent->GetWindowRect (&rcRect);
4.pParent->ScreenToClient(&rcRect);
5.m_List.Create (WS_VISIBLE|WS_BORDER,rcRect,this, 50);
6.m_List.SetParent(pParent);
}  // 以上代码去除CListCtrl闪烁问题


而它原来的父窗口还能处理它的各种事件. 比如 单击,双击事件:(动态创建需手动加消息映射表)

(第5句改成 m_List.Create(WS_VISIBLE|WS_BORDER,rcRect,pParent, 50);第6句不要了)
那么对话框就无法接收和处理到CListCtrl的消息了.这是怎么会事?)

回答:有些控件只认创建时的父窗口,一些通知消息只发给这个创建时的父窗口,不会发给之后SetParent设置的父窗口,象ListView,ToolBar这类控件就是,你创建时设置父窗口为STATIC,这些通知消息就发给STATIC了,而STATIC没有消息转发机制,因此对话框就收不到这些消息了。

二:
防止CListCtrl闪烁的几种方法 (2009-12-28 11:24:15)转载▼
标签: listctrl 闪烁 防止 it        分类: VC及相关
1.使用SetRedraw禁止窗口重绘,操作完成后,再恢复窗口重绘
m_ctlList.SetRedraw(FALSE); 
//以下为更新数据操作
//……
//恢复窗口重绘
m_ctlList.SetRedraw(TRUE);
2.使用LockWindowUpdate禁止窗口重绘,操作完成后,用UnlockWindowUpdate恢复窗口重绘
m_ctlList.LockWindowUpdate(); 
//以下为更新数据操作
//……
//恢复窗口重绘
m_ctlList.UnlockWindowUpdate(); 
3.使用ListCtrl的内部双缓冲
m_ctlLisit.SetExtendedStyle(m_ctlLisit.GetExtendedStyle()|LVS_EX_DOUBLEBUFFER);
VC6未定义LVS_EX_DOUBLEBUFFER宏,使用者可以自定义,如下:
#define LVS_EX_DOUBLEBUFFER 0x00010000
4.Virtual List
首先要设置ListCtrl风格为LVS_REPORT | LVS_OWNERDATA或在ListCtrl属里中的More Styles页面中选中Owner data复选框。
其次要向应LVN_GETDISPINFO消息;
void OnGetdispinfoList(NMHDR* pNMHDR, LRESULT* pResult)
{
LV_DISPINFO* pDispInfo = (LV_DISPINFO*)pNMHDR; 
LV_ITEM *pItem = &(pDispInfo)->item;
char szText[128] = {0};
if (pItem->mask & LVIF_TEXT)
{
//使缓冲区数据与表格子项对应
//m_ArrayBuff为二维数组
//定义如下 int m_ArrayBuff[2048][4];
  _stprintf(szText,_T("%d"),m_ArrayBuff[pItem->iItem][pItem->iSubItem]);   
  pItem->pszText = szText;  
} 
*pResult = 0;
}
最后便是生成缓冲区数据
void Insertdata()
{
//删除之前的数据
m_ctlList.SetItemCountEx(0);
m_ctlList.Invalidate();
    m_ctlList.UpdateWindow();
srand( (unsigned)time( NULL ));

//生成新的数据缓冲区
int nItemCount = 2048;
for (int i = 0;i < nItemCount; i ++)
{
  for (int k = 0;k < 4;k ++)
  {
   m_ArrayBuff[i][k] = rand()%2048 + 1;
  }
}
if (nItemCount < 2)    
  m_ctlList.SetItemCountEx(1);   
else
  m_ctlList.SetItemCountEx(nItemCount);
m_ctlList.Invalidate();
} 
若要修改数据,只要修改缓冲区m_ArrayBuff的数据即可以
5.Custom Redraw
既然是自绘,首先当然是重载CListCtrl类,并接管WM_ERASEBKGND消息,去掉默认的处理,改为不处理
BOOL CListCtrlEx::OnEraseBkgnd(CDC* pDC)
{
//响应WM_ERASEBKGND消息 
return false;
//屏蔽默认处理
//return CListCtrl::OnEraseBkgnd(pDC);
}
void CListCtrlEx::OnPaint()
{
    //响应WM_PAINT消息
    CPaintDC dc(this); // device context for painting
    CRect rect;
    CRect headerRect;
    CDC MenDC;//内存ID表  
    CBitmap MemMap;
    GetClientRect(&rect);   
    GetDlgItem(0)->GetWindowRect(&headerRect);  
    MenDC.CreateCompatibleDC(&dc);  
    MemMap.CreateCompatibleBitmap(&dc,rect.Width(),rect.Height());
    MenDC.SelectObject(&MemMap);
    MenDC.FillSolidRect(&rect,RGB(228,236,243));  
    //这一句是调用默认的OnPaint(),把图形画在内存DC表上  
    DefWindowProc(WM_PAINT,(WPARAM)MenDC.m_hDC,(LPARAM)0);      
    //输出  
    dc.BitBlt(0,headerRect.Height(),rect.Width(),  rect.Height(),&MenDC,0, headerRect.Height(),SRCCOPY);  
    MenDC.DeleteDC();
    MemMap.DeleteObject();
}


5也可以重写一个类继承CListCtrl, 然后添加消息WM_ERASEBKGND, 在该类中会自动生成方法OnEraseBkgnd(), 在该方法中将默认的“return CListCtrl::OnEraseBkgnd(pDC);”改为“return FALSE”即可

原因是每次刷新CListCtrl控件时,其背景也被刷新了,那么我们设置其背景不再刷新即可
内存设计指南:01 Xilinx DDR4 design guide解析 最近有很多网友咨询FPGA DDR4为什么速率总是上不去的问题,发现他们的设计确实很随意,都没有遵守一些手册的基本要求,所以今天和大家一起重新读一读DDR4 design guide,看看哪些要求是一定不能忽略的。首次设计一款新的芯片或者内存方案时,可能会无从下手。对于内存设计,官方指导首推JEDEC规范,每一代内存推出时,在JEDEC官网均能找到对应的规范文档、各种内存形式的说明文档如DDR4-JESD79、DDR4 SDRAM UDIMM Design Specification以及内存条DEMO等。 阅读详情

相关推荐

深交所 vs 上交所:Level-2实时数据推送规则详解与策略适配指南

本文深度解析沪深Level-2实时数据推送规则的关键差异,包括逐笔成交、逐笔委托和10档行情接口的处理逻辑。针对高频交易策略,详细对比上交所与深交所在数据推送机制、时间戳处理及委托队列解析等方面的差异,并提供具体的策略适配方案和性能优化建议,帮助量化投资者提升跨市场交易稳定性。

weixin_27310417的博客 1162

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

风云爱飞 2660

Android 白名单保活实战:主流厂商适配指南

本文详细解析了Android应用白名单保活的实战策略,重点针对华为、小米、OPPO、vivo等主流厂商的系统特性,提供了精准的后台设置页面跳转适配方案。文章从基础的前台服务实现讲起,深入讲解了白名单的判断、申请与厂商适配的核心代码与避坑指南,旨在帮助开发者合规、稳定地提升应用后台存活率。

motor的博客 1860

CListCtrl 防止闪烁

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

FIGHTING!!! 1002

Polyworks脚本开发学习笔记(十五)-用Python连接Polyworks的COM组件

Polyworks脚本开发学习笔记(十五)-利用Python连接Polyworks的COM组件

qq_43662503的博客 2499

可变形卷积(Deformable Conv)原理解析与torch代码实现

图6为可变形卷积示意图。图1所示为普通卷积在输入特征图上进行卷积计算的过程,卷积核大小为3*3,在输入特征图尺寸为7*7上进行卷积,将卷积核权重与输入特征图对应位置元素相乘并求和得到输出特征图元素,按一定方式滑动窗口就能计算得到整张输出特征图。图6所示,在input feature map上普通卷积操作对应卷积采样区域是一个卷积核大小的正方形(绿框),而可变形卷积对应的卷积采样区域为一些蓝框表示的点,这就是可变形卷积与普通卷积的区别。先来一张图感受一下,图3为标准卷积与可变形卷积的卷积示例。

panghuzhenbang的博客 5万+

防止CListCtrl闪烁的几种方法

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

jiangqin115的专栏 5645

毕业论文管理系统的设计与实现

毕业论文工作是高等学校本科培养阶段的一个重要环节。目前论文管理工作存在着许多问题,例如人工管理极为不便;学生对论文所要撰写的内容并不十分了解,与指导老师的沟通非常不便;老师的指导监督也很难完全到位;手工评审的效率低等。而现有的一些毕业论文信息管理或答辩评审系统只是实现了部分网上交流和评审管理的功能,在答辩评审的自测和项目指标权重等方面都存在着一定的不足。因此,本文设计的毕业论文管理系统采用B/S模式开发。其中,Browser层使用JSP技术开发;

wqq_992250277的博客 3181

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

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

weixin_44148949的博客 873

Spring Boot 3.2 集成 Shiro 2.0.1 踩坑实录:从 javax.servlet 到 jakarta.servlet 的完整迁移指南

本文详细介绍了Spring Boot 3.2集成Shiro 2.0.1时遇到的从javax.servlet到jakarta.servlet的迁移问题,提供了完整的解决方案和迁移指南。通过Maven依赖配置和代码调整,帮助开发者顺利跨越Jakarta EE的兼容性鸿沟,确保Shiro权限控制在Spring Boot 3.2环境中正常运行。

weixin_42570296的博客 481

STM32 移植LwIP 实现网线插拔自动恢复

STM32 移植LwIP 之后,能正常联网通讯,但是发现2个问题, 1、上电初始化前,未插入网线,之后就无法获取到IP地址(DHCP) 2、正常通讯过程中,拔掉网线,然后插回去,不知道如何复位 先看一下LWIP初始化代码 /** * LwIP initialization function */ int MX_LWIP_Init() { /* Initilialize the LwIP stack with RTOS */ tcpip_init( NULL, NULL );

tiantangmoke的博客 8073

防止CListCtrl闪烁的几种方法实现

<br />网上看到了防止CLIstCtrl 闪烁的方法,挺详细的,就是第五种方法有点问题,做了下修改,就可以用了:<br />1.使用SetRedraw禁止窗口重绘,操作完成后,再恢复窗口重绘<br />m_ctlList.SetRedraw(FALSE);<br />//以下为更新数据操作<br />//……<br />//恢复窗口重绘<br />m_ctlList.SetRedraw(TRUE);<br />2.使用LockWindowUpdate禁止窗口重绘,操作完成后,用UnlockWindowU

guo693的专栏 751

【GlobalMapper精品教程】084:tif(tfw)、jpg(jgw)、png(pgw)的区别与联系

摘要:本文介绍了TFW、JGW、PGW等地理参考文件的基本原理和应用。这些文件通过简单的文本格式存储栅格图像的地理坐标信息,适用于平面坐标系下的GIS数据处理。文章详细说明了文件各行的含义,并提供了在ArcGIS和Globalmapper中生成这些文件的具体操作步骤,包括导出TIFF、JPG、PNG格式时勾选生成对应坐标文件的选项。这些文件虽然简单易用,但仅适用于平面坐标系,且功能相对有限。配套视频教程提供了更详细的操作演示。

智慧空间实验室 2399

防止CListCtrl闪烁的几种方法(转)

防止CListCtrl闪烁的几种方法 1.使用SetRedraw禁止窗口重绘,操作完成后,再恢复窗口重绘 m_ctlList.SetRedraw(FALSE);  //以下为更新数据操作 //…… //恢复窗口重绘 m_ctlList.SetRedraw(TRUE); 2.使用LockWindowUpdate禁止窗口重绘,操作完成后,用Unl...

leadtheway的专栏 289

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

【转】防止CListCtrl闪烁的几种方法

转载出处:http://blog.sina.com.cn/s/blog_5ee42ba30100g50j.html 1.使用SetRedraw禁止窗口重绘,操作完成后,再恢复窗口重绘 m_ctlList.SetRedraw(FALSE);  //以下为更新数据操作 //…… //恢复窗口重绘 m_ctlList.SetRedraw(TRUE); 2.使用LockWindowUpdate禁止窗口重绘...

weixin_34082789的博客 142

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

上一篇: 利用命令切换CTabCtrl控件的Tab页面
下一篇: 结构体中用CString的请注意了,不能使用memset()函数来初始化结构体
cbNotes
博客等级 码龄14年 295粉丝 57原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值