BOOL CQQDlg::OnEraseBkgnd(CDC* pDC)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
CRect rect;
GetClientRect(&rect);
CDC memDC;
memDC.CreateCompatibleDC (pDC); CBitmap bmp;
bmp.CreateCompatibleBitmap (pDC,rect.Width (),rect.Height ());
CBitmap *oldbmp=memDC.SelectObject (&bmp); pDC->BitBlt (0,0,rect.Width (),rect.Height (),&memDC,0,0,SRCCOPY); memDC.SelectObject (oldbmp);
bmp.DeleteObject ();
memDC.DeleteDC (); return true;
}
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
CRect rect;
GetClientRect(&rect);
CDC memDC;
memDC.CreateCompatibleDC (pDC); CBitmap bmp;
bmp.CreateCompatibleBitmap (pDC,rect.Width (),rect.Height ());
CBitmap *oldbmp=memDC.SelectObject (&bmp); pDC->BitBlt (0,0,rect.Width (),rect.Height (),&memDC,0,0,SRCCOPY); memDC.SelectObject (oldbmp);
bmp.DeleteObject ();
memDC.DeleteDC (); return true;
}
解决方案 »
- 进来,看看,你能发现什么?
- 如何消除listbox的边界
- 怎样获得工程目录的绝对路径?
- 请问:如何设置字体
- 求助,ShockwaveFlash播放Flash,对话框背景图片每秒刷新3帧,flash闪烁厉害
- 紧急求问The ClassWizard datebase "F:\shitu.clw"does not exist
- 有谁会这样使用zip的
- 遍例文件佳中的文件同时,我还想同时获得文件的图标(在CLISTCTRL中),但是没有成功,请看下面代码
- 我用splitterwindow划分了两个窗口,其中一个是CEditView,怎么修改edit的风格?
- duilib中,activex浏览器控件,屏蔽脚本错误提示
- 关于DLL的调用问题
- mytest.obj : error LNK2001: unresolved external symbol _setPubKeyFile 请问这个问题怎么解决?
去掉
bmp.DeleteObject ();
memDC.DeleteDC ();
这二行代码也不会有内存泄漏
如果改成如下代码呢:BOOL CQQDlg::OnEraseBkgnd(CDC* pDC)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
CRect rect;
GetClientRect(&rect);
CDC memDC;
memDC.CreateCompatibleDC (pDC); CBitmap *bmp =CBitmap::FromHandle((HBITMAP) LoadImage(NULL, _T("D:\\Program Files\\Tencent\\QQ\\NewSkins\\QQ2006\\BackgroundTitleLeft.bmp"), IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE));
CBitmap *oldbmp=memDC.SelectObject (bmp); pDC->BitBlt (0,0,rect.Width (),rect.Height (),&memDC,0,0,SRCCOPY); memDC.SelectObject (oldbmp);
bmp->DeleteObject ();
memDC.DeleteDC (); return true;
}
怎么产生一次OnEraseBkgnd事件,内存就增加4K,是不是CBitmap对象释放的有问题啊?
可是用第一次贴出的代码:
CRect rect;
GetClientRect(&rect);
CDC memDC;
memDC.CreateCompatibleDC (pDC); CBitmap bmp;
bmp.CreateCompatibleBitmap (pDC,rect.Width (),rect.Height ());
CBitmap *oldbmp=memDC.SelectObject (&bmp); pDC->BitBlt (0,0,rect.Width (),rect.Height (),&memDC,0,0,SRCCOPY); memDC.SelectObject (oldbmp);
bmp.DeleteObject ();
memDC.DeleteDC (); return true; 就没问题;
最后,CloseHandle(hBitmap);一下