void CButtonST::SetIcon(int nIconInId, int nIconOutId)
{
HINSTANCE hInstResource = AfxFindResourceHandle(MAKEINTRESOURCE(nIconInId),
RT_GROUP_ICON);
m_hIconIn = (HICON)::LoadImage(hInstResource, MAKEINTRESOURCE(nIconInId), IMAGE_ICON, 0, 0, 0);
m_hIconOut = (nIconOutId == NULL) ? m_hIconIn : (HICON)::LoadImage(hInstResource, MAKEINTRESOURCE(nIconOutId), IMAGE_ICON, 0, 0, 0);
RedrawWindow();
}如上函数如果连续多次调用,如在ontimer中,就会让程序当掉,我猜是句柄释放的问题。大侠们,请问怎么处理呢。调用时要注意什么

解决方案 »

  1.   

    m_hIconIn = (HICON)::LoadImage(hInstResource, MAKEINTRESOURCE(nIconInId), IMAGE_ICON, 0, 0, 0);
    m_hIconOut = (nIconOutId == NULL) ? m_hIconIn : (HICON)::LoadImage(hInstResource, MAKEINTRESOURCE(nIconOutId), IMAGE_ICON, 0, 0, 0);
    ==这两个句柄不要在这个函数中调用。直接写在对话框的初始化函数中就行了。
    或者在这个函数最前面判断这两个句柄是否为空,不为空就DeleteObject(m_hIconIn);DeleteObject(m_hIconOut);
      

  2.   

    happyparrot(为何我买彩票从来不中奖?没钱怎么办阿?) ,你终于来啦我试过if(NULL!=m_hIconIn) DeleteObject(m_hIconIn);
    但是问题还依然存在。我前一个贴子的第二段代码已经搞掂了。
    就这段的问题还依旧