HBITMAP位图用LoadImage后怎么正确释放位图资源,防止内存泄漏?

HBITMAP位图用LoadImage后如何正确释放位图资源,防止内存泄漏???
  大家好,帮忙看看关于位图资源释放的问题,谢谢!
(1)遇到的问题是:循环显示一段时间后,提示”程序内存非常不足,必须关闭“!我知道是内存泄漏了,但是不清除如何有效地释放位图资源,我怀疑的是DeleteObject(m_hAutoUpMotion);未释放成功。

(2)问题描述:  MFC界面上CStatic控件上用定时器循环显示bmp图片IDB_UP_OFF,HBITMAP m_hAutoUpMotion为窗口类对象,在OnInitDialog()中初始化:
   BOOL CAutoOperation::OnInitDialog()
{
        ...................
        m_hAutoUpMotion=NULL;
       m_hAutoUpMotionBmp=NULL;
       ....................
}

定时器处理函数:
void CAutoOperation::OnTimer(UINT_PTR nIDEvent)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值

switch(nIDEvent)
{
   case 1:
         if (m_hAutoUpMotion==NULL)
{   
           m_hAutoUpMotion=(HBITMAP)::LoadImage(::AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_UP_OFF),IMAGE_BITMAP,0,0,0);   

}
else
{
   DeleteObject(m_hAutoUpMotion);
       m_hAutoUpMotion=(HBITMAP)::LoadImage(::AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_UP_OFF),IMAGE_BITMAP,0,0,0);
}

m_pAutoUpMotion->ModifyStyle(0,SS_BITMAP);
if (m_hAutoUpMotionBmp==NULL)
{
   m_hAutoUpMotionBmp=m_pAutoUpMotion->SetBitmap(m_hAutoUpMotion);      
}
   
      //释放资源
      if (m_hAutoUpMotionBmp!=NULL)
{
            DeleteObject(m_hAutoUpMotionBmp);
    m_hAutoUpMotionBmp=NULL;
}
                                
                        break;
   
   default: 
       break;

}//end switch

CDialog::OnTimer(nIDEvent);
}






------解决思路----------------------
你的代码不止这些吧,否则不用每次去重新SetBitmap了。
如果就这段代码来说,实在没道理每次都去LoadImage,就算不泄露,也消耗啊。m_hAutoUpMotion应该是成员变量吧,为什么要删掉,而不长期保留呢?到对话框退出时在删除就够了啊
------解决思路----------------------
貌似已经释放了。DeleteObject就可以了啊
------解决思路----------------------

if (m_hAutoUpMotion==NULL)
{   
           m_hAutoUpMotion=(HBITMAP)::LoadImage(::AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_UP_OFF),IMAGE_BITMAP,0,0,0);   

}
else
{
   DeleteObject(m_hAutoUpMotion);
       m_hAutoUpMotion=(HBITMAP)::LoadImage(::AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_UP_OFF),IMAGE_BITMAP,0,0,0);
}

既然都是IDB_UP_OFF,为什么还要重复加载??


if (m_hAutoUpMotionBmp==NULL)
{
   m_hAutoUpMotionBmp=m_pAutoUpMotion->SetBitmap(m_hAutoUpMotion);      
}
   
      //释放资源
      if (m_hAutoUpMotionBmp!=NULL)
{
            DeleteObject(m_hAutoUpMotionBmp);
    m_hAutoUpMotionBmp=NULL;
}      


你和用局部变量有什么区别??