问题已经解决,LoadImage返回的HICON应该用DestroyIcon释放。坑爹的vs2013 msdn,发现很多win32 api都查不了,感觉vs2008 msdn最给力。 

解决方案 »

  1.   

    这个是基础吧,MSDN 上说过的:
    http://msdn.microsoft.com/en-us/library/ms648045.aspxBitmap DeleteObject
    Cursor DestroyCursor
    Icon   DestroyIcon各种资源的释放方式。
      

  2.   


    是啊,就是因为离线的msdn查不到这个函数,结果百度,还原别人用的是错的。
      

  3.   

    VS2010的离线msdn上也没有win32 api的函数
      

  4.   


    _AFXWIN_INLINE CGdiObject::~CGdiObject()
    {
        AFX_BEGIN_DESTRUCTOR        DeleteObject();     AFX_END_DESTRUCTOR
    }
    HGDIOBJ CGdiObject::Detach()
    {
    HGDIOBJ hObject = m_hObject;
    if (hObject != NULL)
    {
    CHandleMap* pMap = afxMapHGDIOBJ(); // don't create if not exist
    if (pMap != NULL)
    pMap->RemoveHandle(m_hObject);
    } m_hObject = NULL;
    return hObject;
    }BOOL CGdiObject::DeleteObject()
    {
    if (m_hObject == NULL)
    return FALSE;
    return ::DeleteObject(Detach());
    }
    //class CBitmap : public CGdiObject//
    _AFXWIN_INLINE BOOL CBitmap::LoadBitmap(LPCTSTR lpszResourceName)
    { return Attach(::LoadBitmap(AfxFindResourceHandle(
    lpszResourceName, RT_BITMAP), lpszResourceName));}
    如果用的是MFC,那建议用GDI/MFC版本 ,位图加载用CBitmap ;
    如果用WIN32,那么就自己处理释放问题!
      

  5.   

    CBitmap  在析构的时候会自动释放资源;