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;
}

 

源码地址:http://download.csdn.net/source/3551031

posted @ 2011-08-26 14:36  银翼的魔术师  阅读(750)  评论(1编辑  收藏  举报