我在OnPaint时间中添加如下代码,来绘制窗口的背景图片.if (IsIconic()){
//...
}else {
CPaintDC dc(this); // device context for painting
CRect rect;
GetClientRect(&rect);
CBitmap bmpBG;
//背景贴图
//bmpBG.LoadBitmap(IDB_BG);
CDC memDC;
memDC.CreateCompatibleDC(&dc);
memDC.SelectObject(&bmpBG);
dc.StretchBlt(1,1,rect.Width(),rect.Height(),
&memDC,0,0,rect.Width(),rect.Height(),
SRCCOPY);
bmpBG.DeleteObject();
memDC.DeleteDC();
}
并在OnInitDialog中将窗口置顶。
//窗口置顶
SetWindowPos(&CWnd::wndTopMost,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);
但是我发现当我拖动其他窗口从我的窗口(比如QQd登录窗口)移动过去的时候,QQ登录窗口走过的地方背景图刷新有的时候会迟钝,依然刷成了灰白色。
实在搞不清楚原因,请教大侠。
//...
}else {
CPaintDC dc(this); // device context for painting
CRect rect;
GetClientRect(&rect);
CBitmap bmpBG;
//背景贴图
//bmpBG.LoadBitmap(IDB_BG);
CDC memDC;
memDC.CreateCompatibleDC(&dc);
memDC.SelectObject(&bmpBG);
dc.StretchBlt(1,1,rect.Width(),rect.Height(),
&memDC,0,0,rect.Width(),rect.Height(),
SRCCOPY);
bmpBG.DeleteObject();
memDC.DeleteDC();
}
并在OnInitDialog中将窗口置顶。
//窗口置顶
SetWindowPos(&CWnd::wndTopMost,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);
但是我发现当我拖动其他窗口从我的窗口(比如QQd登录窗口)移动过去的时候,QQ登录窗口走过的地方背景图刷新有的时候会迟钝,依然刷成了灰白色。
实在搞不清楚原因,请教大侠。
//bmpBG.LoadBitmap(IDB_BG);CDC memDC;
memDC.CreateCompatibleDC(&dc);
memDC.SelectObject(&bmpBG);dc.StretchBlt(1,1,rect.Width(),rect.Height(),
&memDC,0,0,rect.Width(),rect.Height(),
SRCCOPY);
bmpBG.DeleteObject();
memDC.DeleteDC();你最后应该memDC.SelectObject()先前的bmp(用CBitmap*保存你的mem.SelectObject(&bmpBG)
你最后的bmpBG.DeletObject();应该是调用失败的
//...
}else {
CPaintDC dc(this); // device context for painting
CRect rect;
GetClientRect(&rect);
CBitmap bmpBG;
//背景贴图
bmpBG.LoadBitmap(IDB_BG);
CDC memDC;
memDC.CreateCompatibleDC(&dc);
memDC.SelectObject(&bmpBG);
dc.StretchBlt(1,1,rect.Width(),rect.Height(),
&memDC,0,0,rect.Width(),rect.Height(),
SRCCOPY);
bmpBG.DeleteObject();
memDC.DeleteDC();
}
CRect rect;
GetClientRect(&rect);
CBitmap bmpBG;
//背景贴图
bmpBG.LoadBitmap(IDB_BG);
CDC memDC;
memDC.CreateCompatibleDC(&dc);
CBitmap* bmp = (CBitmap*)memDC.SelectObject(&bmpBG);dc.StretchBlt(1,1,rect.Width(),rect.Height(),
&memDC,0,0,rect.Width(),rect.Height(),
SRCCOPY);
memDC.SelectObject(bmp);bmpBG.DeleteObject();
memDC.DeleteDC();修改了一下你else语句部分的代码
调用bmpBG.LoadBitmap(IDB_BG);OnPaint改为
if (IsIconic()){
//...
}else {
CPaintDC dc(this); // device context for painting
CRect rect;
GetClientRect(&rect);
CDC memDC;
memDC.CreateCompatibleDC(&dc);
CBitmap* bmp = (CBitmap*)memDC.SelectObject(&bmpBG);
dc.StretchBlt(1,1,rect.Width(),rect.Height(),
&memDC,0,0,rect.Width(),rect.Height(),
SRCCOPY);
memDC.SelectObject(bmp);
//bmpBG.DeleteObject();
memDC.DeleteDC();
CDialog::OnPaint();
}
}
CRect rect;
GetClientRect(&rect);
CBitmap bmpBG;
//背景贴图
bmpBG.LoadBitmap(IDB_BG); CDC memDC;
memDC.CreateCompatibleDC(&dc);
CBitmap * pBmp = (CBitmap *)memDC.SelectObject(&bmpBG);
dc.StretchBlt(1,1,rect.Width(),rect.Height(),
&memDC,0,0,rect.Width(),rect.Height(),
SRCCOPY);
memDC.SelectObject(pBmp);
bmpBG.DeleteObject();
memDC.DeleteDC();
ReleaseDC(&dc);
//CDialog::OnPaint();