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调试通过

你可能感兴趣的:(windows,XP,图形)