void CPhoneBitmap::OnPaint(void)
{
CPaintDC dc(this); // device context for painting

HBITMAP MemoryBitmap;
MemoryBitmap = LoadBitmap(AfxGetInstanceHandle(),MAKEINTRESOURCE(m_uiPhoneBitmapID));

         if(NULL != MemoryBitmap) {
DeleteObject(MemoryBitmap);
}
}
m_uiPhoneBitmapID是不同的图片id,我每秒都调用OnPaint函数,我观察任务管理器,当GDI对象到10000时,读图片就丢失了,请教如何释放LoadBitmap的资源???

解决方案 »

  1.   

    msdn:
    The application must call the DeleteObject function to delete each bitmap handle returned by the LoadBitmap function. 
      

  2.   

    汗.delete一个object前确保他当前不被某个设备环境选中.
      

  3.   

    看代码,已经DeleteObject,那是否还有别的途径,导致没有释放?
    用boundchecker检查一下
      

  4.   

    倾向认同2楼意见.
    检查一下DeleteObject返回值.
      

  5.   

    估计是HBITMAP被选入了DC,DeleteObject失败了。在DeleteObject之前先SelectObject把上次SelectObject返回的句柄选中。
      

  6.   

    如果你的图片不是太大量的情况,建议在Create的时候就全部load好,然后直接调用就ok这样还可以节约一些时间
      

  7.   

    HBITMAP  MemoryBitmap; 
    MemoryBitmap = LoadBitmap(AfxGetInstanceHandle(),MAKEINTRESOURCE(m_uiPhoneBitmapID));          if(NULL != MemoryBitmap) { 
    DeleteObject(MemoryBitmap); 
    } 你的。中有没有使用SetBitmap()之类的函数,如果有的话,那么每次你调SetBitmap()的时候,该函数都会返回你要将位图装入的那个控件的原位图句柄,所以你要捕捉SetBitmap()的返回值,在结束的时候或者立即调用DeleteObject()杀掉它, 否则这个旧的位图的对象就会像个孤魂野鬼一样在系统内存中飘荡,而且随着你调用SetBitmap()的次数,越来越多,最终导致程序崩溃。