VC无闪烁刷屏技术的实现(3)
//CView::OnEraseBkgnd(pDC);
CStrucDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
CRect rect;
GetWindowRect(&rect);
nWidth = rect.Width();
nHeight= rect.Height();
CDC MemDC;
CBitmap MemBitmap;
MemDC.CreateCompatibleDC (NULL);
MemBitmap.CreateCompatibleBitmap(pDC,nWidth,nHeight);
CBitmap *pOldBit=MemDC.SelectObject(&MemBitmap);
MemDC.FillSolidRect(0,0,nWidth,nHeight,RGB(255,255,255));
///////////////////////////////////////////////////////
//// 以上为画背景色 //////////////
//// 以下为画背景图 //////////////
///////////////////////////////////////////////////////
GetClientRect(rect);
BITMAP bm;
CDC dcMem;
VERIFY(m_bmp.GetObject(sizeof(bm),(LPVOID)&bm));
dcMem.CreateCompatibleDC(pDC);
CBitmap *pOldBMP =( CBitmap *)dcMem.SelectObject(&m_bmp);
MemDC.BitBlt( (rect.right - bm.bmWidth)/2,
(rect.bottom - bm.bmHeight)/2,
bm.bmWidth,bm.bmHeight,&dcMem,0,0,SRCCOPY);
dcMem.SelectObject(pOldBMP);
///////////////////////////////////////////////////////
//// 以上为画背景图 //////////////
///////////////////////////////////////////////////////
pDC->BitBlt(0,0,nWidth,nHeight,&MemDC,0,0,SRCCOPY);
MemBitmap.DeleteObject();
MemDC.DeleteDC();
return TRUE;
}
/////////////// 无闪烁背景图绘制 //////////
/////////////////////////////////////////////
注:程序中m_bmp 为相应 的 StrucView.h中定义,为位图资源类
protected:
CBitmap m_bmp;
并应加上下面段,当然,你可在任何时候加入loadBitmap 子例程,也可加入文件资源,那由得你了!
CStrucView::CStrucView()
{
VERIFY(m_bmp.LoadBitmap(IDB_BITMAP3));
}