BOOL CLoginSystem::OnEraseBkgnd(CDC* pDC)
{
// TODO: Add your message handler code here and/or call default
CString string="E://Pic//BACKGROUND.bmp";
HBITMAP hbitmap=(HBITMAP)::LoadImage(AfxGetInstanceHandle(),string,
IMAGE_BITMAP,1024,768, LR_CREATEDIBSECTION|LR_LOADFROMFILE);
//VERY IMPORTANT:NOT CALL THE SUPER CLASS FUNCTION
CPaintDC dc(this);
if(hbitmap==NULL)
return FALSE;
CBitmap bitmap;
bitmap.Attach(hbitmap);
BITMAP bmp;
bitmap.GetBitmap(&bmp);
CDC cdc;
cdc.CreateCompatibleDC(pDC);
cdc.SelectObject(&bitmap);
pDC->BitBlt(0,0,bmp.bmWidth,bmp.bmHeight,&cdc,0,0,SRCCOPY);
return TRUE;
}
下面这个方法没验证是否有错误,有兴趣的可以去试试看。CDC MemDC;
CClientDC ClientDC(this);
MemDC.CreateCompatibleDC(&ClientDC);
hBitmap=(HBITMAP):: LoadImage( AfxGetInstanceHandle(),"res//Loader_BG.bmp",IMAGE_BITMAP,0,0,
LR_CREATEDIBSECTION|LR_LOADFROMFILE);
if(hBitmap==NULL)
{
return FALSE;
}
CBitmap bitmap;
bitmap.Attach(hBitmap);
BITMAP bmp;
bitmap.GetBitmap(&bmp);
CDC cdc;
cdc.CreateCompatibleDC(pDC); //又来一个cdc,上面那个MemDC干什么用?
CBitmap *pOldBmp = cdc.SelectObject(&bitmap);
RECT rec;
GetWindowRect(&rec);
//pDC->BitBlt(0,0,rec.right,rec.bottom,&cdc,0,0,SRCCOPY);//这样可能不能绘制位图,如果位图比窗口小的话,改成
pDC->BitBlt(0,0,bmp.bmWidth,bmp.bmHeight,&cdc,0,0,SRCCOPY);//否则,bmp变量有什么用?
cdc.SelectObject(pOldBmp); //GDI资源选入DC后要及时选出销毁
//DeleteObject(hBitmap); //由于你这里位图句柄绑定到CBitmap对象了,在析构函数中会自动销毁,否则需要自己销毁
//如果加载位图时有LR_SHARED标记,不需要销毁。