我的程序要不停的读取一个报警器的状态,100ms一次程序界面上有一组图标根据读到的状态,设置成红绿两个BITMAP
m_ctrPicSite1.SetBitmap(::LoadBitmap(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDB_BITMAP_RED)));
m_ctrPicSite1.SetBitmap(::LoadBitmap(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDB_BITMAP_GREEN)));
实现图标根据报警状态的变色。可是这个程序运行大约10分钟左右就会界面显示混乱,连弹出的对话框的大小字体都乱了。我想问问是不是我用的这个方法不对,和界面本身OnPain冲突呀?

解决方案 »

  1.   

    明显资源泄漏:
    建议把::LoadBitmap(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDB_BITMAP_RED)
    保存到全局变量CBitmap里~
    不必每100ms都读取一次位图
      

  2.   

    Agree with the above view!
      

  3.   

    资源泄露, Load了太多次的bitmap,却没有释放了。
    在类里创两个  CBitmap m_bitmap1, m_bitmap2;
    初始化的时候加入:
    m_bitmap1.LoadBitmap(IDB_BITMAP_RED);
    m_bitmap2.LoadBitmap(IDB_BITMAP_GREEN);然后以后都一直用 
    m_ctrPicSite1.SetBitmap(HBITMAP(m_bitmap1));
    m_ctrPicSite1.SetBitmap(HBITMAP(m_bitmap2));最后退出时:
    m_bitmap1.DeleteObject();
    m_bitmap2.DeleteObject();