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

         当频繁往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调试通过

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值