MFC窗体背景色

时间:2022-01-21 14:49:24
使用位图设置窗体背景色,程序代码如下
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了

#3


我靠,我要疯了,就改个这东东浪费了好长时间

#4


即使你改变了pDC参数,调用父类的实现时。使用的参数依然是接收该消息时的pDC。因此如果你调用了父类的实现,你对pDC的改变都将是无用功。

#1


另外这个窗口时一个子窗口。

#2


最后一句
return CDialog::OnEraseBkgnd(pDC);
改成
return TRUE;
ok了

#3


我靠,我要疯了,就改个这东东浪费了好长时间

#4


即使你改变了pDC参数,调用父类的实现时。使用的参数依然是接收该消息时的pDC。因此如果你调用了父类的实现,你对pDC的改变都将是无用功。