调用了是不是容易出错?

解决方案 »

  1.   

    为神马我用了多个setbitmap 执行程序的时候会报错 unknow software exception(0x80000003)位置为0x7c921200?具体就是在对话框上面做一个LED的显示灯 需要往一个静态文本上面刷一个绿灯的bmp 和 一个红灯的bmp~但是刷的时间长了就会报错,是不是因为图片一值往静态文本上面刷 导致内存写满了?有没有什么方法能解决这个问题啊?比如说在另一幅bmp文件加载之前我先把原来的bmp文件从静态文本控件上面删除掉?
      

  2.   

    GDI+的bitmap好像不行,它里面好像是独占的
    用其他的吧
      

  3.   

    GDI+是什么东西 不懂啊 我就是从insert里面插入的BMP资源啊
      

  4.   

    我用过CStatic的setbitmap,加载的资源的是类静态成员,因多个控件需要,所以只从文件加载一次即可。如果只读的话,是没有问题的。
      

  5.   

    你打开任务管理器,看看你的进程GDI数量,应该是你的GDI泄露造成的。
      

  6.   

    请问大熊哥 任务管理在哪打开?是WINDOWS的任务管理器吗?
      

  7.   

    /* //即时温度显示
    // if(f_temp<100)
    strtemp.Format("% 3.4f ",f_temp);
    // else
    // strtemp.Format("%3.4f ",f_temp);   //格式对齐
    m_ledrecv.SetText(strtemp); //LED显示
    //温度限值显示
    //fan
    // if(rxdata[2]<100)
    fanlimit.Format(" %d ",rxdata[2]);
    // else
    // fanlimit.Format("%d ",rxdata[2]); //格式对齐
    m_fanset.SetText(fanlimit);
    //beep
    beeptemp=rxdata[2]+2;   //根据风扇温度这里设置了一个预订的报警温度

    // if(rxdata[2]<100)
    beeplimit.Format(" %d ",beeptemp);
    // else
    // beeplimit.Format("%d ",beeptemp); //格式对齐
    m_beepset.SetText(beeplimit);

    //是否达到散热温度
    if(f_temp>rxdata[2])
    { //判断超过报警温度没有
    if(f_temp>(beeptemp))
    {
    temp_notice="***WARNING***";
    //temp LED设置为"橙色"
    // m_ledrecv.SetColor(BLACK,RGB(255, 143 , 51));
    //系统指示灯显示为"橙色"
    m_ledsystem.SetBitmap(::LoadBitmap(AfxGetApp()->m_hInstance,MAKEINTRESOURCE(IDB_RED)));
    //系统文本显示为 "警告"
    GetDlgItem(IDC_STATESYSTEM)->SetWindowText( "★WARNING★" );
    }
    //达到散热温度 但是没有达到报警温度
    // else
    // {
    //temp Led显示为"黄色"
    m_ledrecv.SetColor(BLACK,YELLOW);
    //风扇文本显示"打开"
    GetDlgItem(IDC_STATEFAN)->SetWindowText( "ON" );
    //风扇指示灯"打开"
    m_ledfan.SetBitmap(::LoadBitmap(AfxGetApp()->m_hInstance,MAKEINTRESOURCE(IDB_GREEN1)));   
    //系统文本显示为"Nromal"
    GetDlgItem(IDC_STATESYSTEM)->SetWindowText( "    Hot" );
    //系统指示灯显示为"黄色"
    m_ledsystem.SetBitmap(::LoadBitmap(AfxGetApp()->m_hInstance,MAKEINTRESOURCE(IDB_YELLOW)));


    // }
    }
    //如果没有达到风扇工作温度
    else
    {
    temp_notice="Normal";
    //temp LED设置为"绿色"
    m_ledrecv.SetColor(BLACK,RGB(0, 255 , 0));

    //风扇文本显示"OFF"
    GetDlgItem(IDC_STATEFAN)->SetWindowText( "OFF" );
    //风扇指示灯"关闭"
    // m_ledfan.SetBitmap(::LoadBitmap(AfxGetApp()->m_hInstance,MAKEINTRESOURCE(IDB_GREY1)));
    //系统文本显示为"Nromal"
    GetDlgItem(IDC_STATESYSTEM)->SetWindowText( "   Normal" );
    //系统指示灯显示为"绿色"
    m_ledsystem.SetBitmap(::LoadBitmap(AfxGetApp()->m_hInstance,MAKEINTRESOURCE(IDB_GREEN)));
      

  8.   

    我在window任务管理器里面没有找到GDI啊
      

  9.   

    是任务管理器,在进程属性页内看你的进程所占GDI的数量是不是一直在涨,如果没有这列,就在菜单【查看】/【选择列】内GDI选项内选钩再看。
      

  10.   

    大熊哥 你说对了 GID 猛涨!是什么情况呀 应该怎么解决呢?
      

  11.   

    GDI猛涨是因为GDI对象泄漏造成的,用过的GDI对象要及时删除。【windows程序设计】这本书里有关于GDI的操作讲解,有电子版的,你可以下一本。