2010.11.10

子控件的重绘

内存dc。

在OnPaint中,直接用dc画 可能会导致闪烁,如下可解决:

 

防闪烁内存dc

CPaintDC dc(this);
if (m_pMemDc->GetSafeHdc() == NULL)
  {   
   m_pMemDc->CreateCompatibleDC(&dc);
   HANDLE h=m_pBitmap->GetSafeHandle();
   m_pBitmap->DeleteObject();
   m_pBitmap->CreateCompatibleBitmap(&dc, oRect.Width(),oRect.Height());
  }

m_pMemDc->SelectObject(m_pBitmap);
m_pMemDc->PatBlt(oRect.left,oRect.top,oRect.Width(),oRect.Height(),PATCOPY);

//设置背景色
m_pMemDc->SelectObject(&bBack);
m_pMemDc->SetBkColor(m_oCurInfo.dwBackColor);
m_pMemDc->SetBkMode(TRANSPARENT);  //设置透明


//中间进行画图和普通dc一样

 

// 显示
dc.BitBlt(oRect.left,oRect.top,oRect.Width(), oRect.Height(),m_pMemDc,oRect.left,oRect.top,SRCCOPY);

 

posted @ 2010-11-10 18:03  pjh123  阅读(151)  评论(0编辑  收藏  举报