很奇怪,我首先是在APP的InitInstance初始化打开了GDI+
GdiplusStartupInput gdiplusStartupInput;
LONG_PTR           gdiplusToken;
GdiplusStartup((ULONG_PTR)&gdiplusToken, &gdiplusStartupInput, NULL);主窗口和子窗口一模一样的过程。。先是OnCreate中 m_hFuncInst = LoadLibrary(_T("User32.DLL"));
if(m_hFuncInst) 
UpdateLayeredWindow=(MYFUNC)GetProcAddress(m_hFuncInst, "UpdateLayeredWindow"); m_Blend.BlendOp = 0;
m_Blend.BlendFlags = 0;
m_Blend.AlphaFormat = 1;
m_Blend.SourceConstantAlpha=255; m_pImagePaint = Image::FromFile(_T("res\test.png"));
FreeLibrary(m_hFuncInst);
然后就是调用自定义的UpdateGUDIPaint函数完成png窗口的初始化了如果我主窗口不调用我自定义的UpdateGUDIPaint函数   那什么事都没有   运行很流畅 
一点点的内存泄漏都没有
一旦我主窗口调用了自定义的UpdateGUDIPaint函数,调用一次程序在系统中的虚拟内存就增加一次一次能增加10MB左右   太恐怖了吧。
难道GDI+只支持一个窗口进行操作???????我单独测试过自定的UpdateGUDIPaint函数    没有内存泄漏    虚拟内存也不会上涨    结束语句释放对象也都释放了
这怎么回事?      请教!!

解决方案 »

  1.   

    UpdateGUDIPaint没有内存泄漏,这么肯定?贴出来吧.
      

  2.   

    都是抄来的代码有啥不能贴的?我这有现成的GDI+代码的,开两个窗口也不泄露,说明不是这个问题...尽量用双缓存绘图,而且要记得释放设备graph.ReleaseHDC(m_hdcMemory);
    DeleteObject(hBitMap);
    DeleteDC(m_hdcMemory);
      

  3.   

    多窗口不内存泄漏,楼主如果不能上代码的话。那我就推荐楼主一个工具,boundchecker  自己查内存泄漏吧。http://www.vckbase.com/tools/downtools.asp?id=22 
      

  4.   

    原因很多,比如兼容位图在dc中的时候销毁不了等等,检查一下gdi资源等吧
      

  5.   

    这个是虚拟内存上升     普通工具检测不到内存泄漏    
    不过我已经解决了,原因还是不清楚,似乎和我主窗口的Image的指针有关系
    不管了以后有空在研究  散分