List Control的刷新闪烁

List   Control的刷新闪烁,style为ICON,我重写了OnCustomDraw事件,每次刷新对于List的每个item都会调一次OnCustomDraw,这样产生严重的闪烁

双缓冲啊,绘图基本都这么干  
   
  给你一个类:  
   
  class   CMemDC   :   public   CDC  
  {  
  public:  
  CMemDC(CDC*   pDC)   :   CDC()  
  {  
  m_pDC   =   pDC;  
  m_pOldBitmap   =   NULL;  
  pDC->GetClipBox(&m_rect);  
  CreateCompatibleDC(pDC);  
  m_bitmap.CreateCompatibleBitmap(pDC,   m_rect.Width(),   m_rect.Height());  
  m_pOldBitmap   =   SelectObject(&m_bitmap);  
  SetWindowOrg(m_rect.left,   m_rect.top);  
  }  
   
  ~CMemDC()  
  {  
  m_pDC->BitBlt(m_rect.left,   m_rect.top,   m_rect.Width(),   m_rect.Height(),  
  this,   m_rect.left,   m_rect.top,   SRCCOPY);  
  SelectObject(m_pOldBitmap);  
  }  
  CMemDC*   operator->()   {return   this;}  
  operator   CMemDC*()   {return   this;}  
  public:  
  CBitmap   m_bitmap;  
  CBitmap   *m_pOldBitmap;  
  CDC*   m_pDC;  
  CRect   m_rect;  
  };  
   
  你在你原来的程序里面这样就就可以了:  
   
  CRect   rect;  
  pDC->GetClipBox(rect);  
   
  CMemDC   dc(pDC);  
  dc.FillSolidRect(rect,   RGB(255,   255,   255));  
   
  然后所有内容都画到dc上,而不要画到pDC上  
   
  就行了
-------------------------------------------------------------------------------------------------
试试下面的方法  
  在CDDS_PREPAINT阶段把list   ctrl   DC的bitblt到一个memory   DC中,在custom   draw的其它phase中把要draw的内容draw到memDC中,在最后一个item   的post   phase阶段把memDC的内容复制给list   ctrl   DC.  
   
  不过我在使用custom   draw定制list   ctrl时,即使对每一个subitem都draw,也没有很严重的flicker;)  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值