BOOL CPlayCtrDialog::OnEraseBkgnd(CDC* pDC)
{
CRect rectbk; // 客户区的大小
GetClientRect(&rectbk);
CDC bgDc,memDc; // 内存设备描述表
CBitmap bgBit;
// 得到位图bitmap的大小
BITMAP stBitmapLeft,stBitmapRight,stBitmapBody,stBitmapMain;
int left = 0,top = 0,height = 0,width = 0;
bgDc.CreateCompatibleDC(pDC); // 创建兼容的设备描述表
memDc.CreateCompatibleDC(pDC);
bgBit.CreateCompatibleBitmap(pDC,rectbk.Width(),rectbk.Height());
CBitmap *pOldBitmap1 = bgDc.SelectObject(&bgBit);
CBitmap *pOldBitmap2 = NULL;
//left
if (m_bmpLeft.GetSafeHandle())
{
pOldBitmap2 = memDc.SelectObject(&m_bmpLeft); // 选入新的位图对象并保存旧的位图对象
m_bmpLeft.GetBitmap(&stBitmapLeft);
// 取得客户区的大小
// 从内存向屏幕复制位图对象
bgDc.StretchBlt(left,top,stBitmapLeft.bmWidth, stBitmapLeft.bmHeight,
&memDc,0,0,stBitmapLeft.bmWidth, stBitmapLeft.bmHeight,SRCCOPY);
}
//draw bkmap
pDC->StretchBlt(0,0,rectbk.Width(),rectbk.Height(),&bgDc,0,0,rectbk.Width(),rectbk.Height(),SRCCOPY);
// 恢复旧的位图对象
memDc.SelectObject(pOldBitmap2);
bgDc.SelectObject(pOldBitmap1);
bgDc.DeleteDC();
memDc.DeleteDC();
bgBit.DeleteObject();
return CDialog::OnEraseBkgnd(pDC);
}
在OnInitDialog中调用了m_bmpLeft.LoadBitmap(IDC_BK_LEFT);
但是它就是不把背景色显示出来。
搞了好久不知道怎么回事。求解。
4 个解决方案
#1
另外这个窗口时一个子窗口。
#2
最后一句
return CDialog::OnEraseBkgnd(pDC);
改成
return TRUE;
ok了
return CDialog::OnEraseBkgnd(pDC);
改成
return TRUE;
ok了
#3
我靠,我要疯了,就改个这东东浪费了好长时间
#4
即使你改变了pDC参数,调用父类的实现时。使用的参数依然是接收该消息时的pDC。因此如果你调用了父类的实现,你对pDC的改变都将是无用功。
#1
另外这个窗口时一个子窗口。
#2
最后一句
return CDialog::OnEraseBkgnd(pDC);
改成
return TRUE;
ok了
return CDialog::OnEraseBkgnd(pDC);
改成
return TRUE;
ok了
#3
我靠,我要疯了,就改个这东东浪费了好长时间
#4
即使你改变了pDC参数,调用父类的实现时。使用的参数依然是接收该消息时的pDC。因此如果你调用了父类的实现,你对pDC的改变都将是无用功。