MFC双缓存无闪烁切换背景图
代码如下:
BOOL COnPintView::OnEraseBkgnd(CDC* pDC)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
CBitmap bitmap;
CRect rect;
//GetClientRect(&rect);
GetWindowRect(&rect);
CDC dcMemory;
dcMemory.CreateCompatibleDC(NULL);
bitmap.CreateCompatibleBitmap(pDC,rect.Width(),rect.Height());
CBitmap* pOldBitmap = dcMemory.SelectObject(&bitmap);
dcMemory.FillSolidRect(rect,RGB(255,255,255));
//画背景图在内存上
CBitmap btm;
if(m_nIndex ==0)
{
btm.LoadBitmap(IDB_BITMAP1);
}
else
{
btm.LoadBitmap(IDB_BITMAP2);
}
GetClientRect(rect);
BITMAP bm;
CDC dcMem;
VERIFY(btm.GetObject(sizeof(bm),(LPVOID)&bm));
dcMem.CreateCompatibleDC(pDC);
CBitmap *pOldBMP =( CBitmap *)dcMem.SelectObject(&btm);
dcMemory.BitBlt( (rect.right - bm.bmWidth)/2,(rect.bottom - bm.bmHeight)/2,bm.bmWidth,bm.bmHeight,&dcMem,0,0,SRCCOPY);
dcMem.SelectObject(pOldBMP);
dcMem.DeleteDC();
//显示在界面上
pDC->BitBlt(0, 0, rect.right, rect.bottom, &dcMemory,0, 0, SRCCOPY);
dcMemory.SelectObject(pOldBitmap);
dcMemory.DeleteDC();
bitmap.DeleteObject();
btm.DeleteObject();
//return CView::OnEraseBkgnd(pDC);
return TRUE;
}