看了以前的文章,提到建一个内存dc,把绘图工作在上面完成然后在ONDRAW里BITBLT到PDC上.这个方法不错,但有些地方还是不很清楚.比如我有个视图类,我加上一个成员变量 CDC m_dc,在初始化时SELECT一个CBITMAP对象,在ONDRAW里只调用一个BITBLT函数.问题就在于在没有用成员变量的例子里,这个CBITMAP对象在完成绘图后要通过 m_dc.selectobject(oldbmp),然后再DELETE掉,而像这种m_dc做成员变量的情况下应该如何把CBITMAP给弄掉呢.我对类似这种CDC内存泻漏问题的认识还不很清楚,希望能有大虾帮讲解一下
Dumping objects ->
d:\_private\myoffice\vc\test\platewndtest\platewndtest.cpp(52) : {58} normal block at 0x00344BB0, 1 bytes long.
Data: < > CD
Object dump complete.如果在debug模式下运行程序时debug窗口中出现了类似上面的信息,那就证明有内存泄露,否则就没有。
debug只能检测到很少一部分
更多的内存泄露责需要外部工具去检测,
具体的让后面的人补充 ^-^
GetClientRect(&rc); CBitmap temp_bmp;
temp_bmp.CreateCompatibleBitmap(pDC,rc.right,rc.bottom);
CBitmap *old=m_dc.SelectObject(&temp_bmp);
m_dc.FillSolidRect(0,0,rc.right,rc.bottom,RGB(0,0,255)); old->DeleteObject(); //这里有没有问题?我搞不清CDC内部到底是什么样的,选进去的对象跟整体是什么关系,为什么最后一定要把旧的选回去?像上面那样不选回去会有什么问题吗?
还有这个,MSDN里关于GETDC()的说明Unless the device context belongs to a window class, the ReleaseDC member function must be called to release the context after painting. 那我用memDC.CreateCompatibleDC(GetDC()); 还需不需要用REALESEDC()?