CListBox频繁插入删除数据时,闪烁的问题

原创 2007年10月10日 08:55:00

         当频繁往listbox里插入删除数据时,会出现闪烁的情况,这时就需要重绘listbox,当然还是用到双缓冲技术,代码如下:

//重载OnEraseBkgnd
BOOL CMyListBox::OnEraseBkgnd(CDC* pDC) 
{
        
//直接返回,不重绘背景
        return TRUE;
}



//重载OnPaint

void CMyListBox::OnPaint() 
{
        CPaintDC dc(
this); // device context for painting
    
        CRect   rect; 
        GetClientRect(
&rect); 

        CDC   MemDC;
//内存DC 
        CBitmap   MemBmp; 
        MemDC.CreateCompatibleDC(
&dc); 
        MemBmp.CreateCompatibleBitmap(
&dc, rect.Width(), rect.Height());
        MemDC.SelectObject(
&MemBmp); 
        
//这时创建的位图只是一张黑色的纸
        
//先画上背景    
        MemDC.FillSolidRect(rect, RGB(255255255));
        
//再画上图形
        
//这一句是调用默认的OnPaint(),把图形画在内存DC表上 
        DefWindowProc(WM_PAINT, (WPARAM)MemDC.m_hDC, (LPARAM)0); 

        
//输出 
        dc.BitBlt(00, rect.Width(), rect.Height(), &MemDC, 00, SRCCOPY); 
    
        MemDC.DeleteDC(); 
        MemBmp.DeleteObject(); 
  }

 其中DefWindowProc比较关键,wParam的值是要绘图的DC,查下MSDN里的WM_PAINT就知道了。

以上代码在WINDOWS XP VC6.0调试通过

CListBox 总是显示最新添加的一行 自动滚动 MFC

添加数据以后,再在下面加句, int nCount = myListBox.GetCount(); if (nCount > 0) myListBox.SetCurSel(nCount - 1)...
  • liuzhuomju
  • liuzhuomju
  • 2012年03月19日 18:32
  • 4412

给CListBox增加个性化的ToolTip

1、新建一个MFC应用程序项目,无项目设置要求 2、添加一个对话框,添加一个ListBox,无属性设置要求,ListBox宽度最好设小点,以突出效果。 3、添加CShellExcuteString类,...
  • caoshiying
  • caoshiying
  • 2016年08月16日 11:21
  • 1314

为CListBox垂直滚动条,自动滚动,文字显示不全问题!

这个题目,其实和我用的项目没什么关系,不过顶一下吧,我主要是用的垂直滚动条。就是滚动条是根据信息自动滚动了,但是文字会显示不全所以还是使用SetCurSel这个接口来直接实现了,毕竟现在要求还不是很严...
  • u012307430
  • u012307430
  • 2016年06月01日 16:26
  • 1167

双缓冲技术解决MFC重绘闪烁问题

转自:http://www.cnblogs.com/lidabo/archive/2012/07/17/2594840.html      在图形图象处理编程过程中,双缓冲是一种基本的技术。我们知道,...
  • francisapp
  • francisapp
  • 2016年10月10日 19:06
  • 1582

MFC带自动水平滚动条ListBox

CHorzListBox类继承自CListBox, 可以根据内容自动显示调整水平滚动条
  • ayang1986
  • ayang1986
  • 2016年07月26日 16:34
  • 1275

防止CListCtrl闪烁的几种方法

1. 使用SetRedraw禁止窗口重绘,操作完成后,再恢复窗口重绘 m_ctlList.SetRedraw(FALSE); //以下为更新数据操作 //…… //恢复窗口重绘 m_ctlList.S...
  • jiangqin115
  • jiangqin115
  • 2015年04月06日 18:15
  • 1273

为CListBox加上智能水平滚动条

在用MFC开发软件过程中,经常会遇到MFC基本控件满足不了我们的需要的时候,这时候就需要根据实际需求派生或重写MFC基本控件。这种情况我不只一次碰到了。以下是为CListBox加上智能水平滚动条,其思...
  • Arcsinsin
  • Arcsinsin
  • 2013年11月09日 10:31
  • 3051

VC++ ListBox 响应鼠标右键消息

微软提供的 CListBox 只能响应鼠标双击消息,那如果要响应右键必须要继承 CListBox  这个,然后去响应 WM_RBUTTONUP 或 WM_RBUTTONDOWN 消息,在这个消息映射的...
  • joneeky
  • joneeky
  • 2014年04月14日 18:25
  • 2125

基于双缓冲技术解决视图刷新重绘闪烁问题

基于双缓冲技术解决视图刷新重绘闪烁问题 1.基本原理 普通视图绘制完成后直接在显示器窗口中显示,所以出现闪烁的现象。双缓冲技术,简单来说就是创建一块虚拟的内存区来存储画布,而显示器中只显示实际显示...
  • phnumber
  • phnumber
  • 2017年03月20日 16:00
  • 448

【自绘ListBox】带图标的ListBox

示例图片源码下载源码下载 示例程序下载使用说明提供的接口如下:void SetImageList(CImageList* pImageList); CImageList* GetImageList(...
  • wangyao1052
  • wangyao1052
  • 2015年05月17日 10:22
  • 1643
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:CListBox频繁插入删除数据时,闪烁的问题
举报原因:
原因补充:

(最多只允许输入30个字)