BOOL CListCtrlEx::OnEraseBkgnd(CDC* pDC)
{ CDC MemDC;
MemDC.CreateCompatibleDC(pDC); //创建与内存兼容的DC
MemDC.DeleteDC();
return FALSE;
}本是写List control双缓冲显示的,但发现存在内存溢出,于是删除一些代码测试,
发现上面代码也存在内存溢出,不知是什么原因,还望大家帮帮!
极度郁闷,调了二天还不能解决!
{ CDC MemDC;
MemDC.CreateCompatibleDC(pDC); //创建与内存兼容的DC
MemDC.DeleteDC();
return FALSE;
}本是写List control双缓冲显示的,但发现存在内存溢出,于是删除一些代码测试,
发现上面代码也存在内存溢出,不知是什么原因,还望大家帮帮!
极度郁闷,调了二天还不能解决!
按MSDN:应该是用DeleteDC 的
An application must not delete a device context whose handle was obtained by calling CWnd::GetDC. Instead, it must call CWnd::ReleaseDC to free the device context. The CClientDC and CWindowDC classes are provided to wrap this functionality. The DeleteDC function is used to delete device contexts created with CreateDC, CreateIC, or CreateCompatibleDC.
{ CDC MemDC;
MemDC.CreateCompatibleDC(pDC); //创建与内存兼容的DC
return FALSE;
}
这样试过了,还是存在溢出。
2。给你篇文章看看:
http://www.rosoo.net/a/embedded_o/201001/8454.html
2.http://www.rosoo.net/a/embedded_o/201001/8454.html文章早看到过,他是没
SelectObject(pOldBit)(恢复),就直接 MemBitmap.DeleteObject()(删除);当然会出错。
代码放在:类继承(derived class ):
class CListCtrlEx : public CListCtrl里的OnEraseBkgnd(CDC* pDC) 就会产生内存溢出。但不放在这里,直接放到void *****Dlg::OnTimer(UINT nIDEvent)里就不会产生内存溢出,
纳闷了,这是为什么??