把这几句话放到函数末尾
if (temphand!=NULL)
{
DeleteObject(temphand);
temphand=NULL;
}
if (bitmap!=NULL)
{
DeleteObject(bitmap);
bitmap=NULL;
}

解决方案 »

  1.   

    temp=NULL;temp是一个CBitmap指针,单纯的赋值NULL是否会存在问题?(猜测!!)
      

  2.   

    我是初学者,以下是我的猜测,不知你能否调用基类的成员函数,就象CWnd::OnCreate();
      

  3.   

    1。首先你把temp定义为成员变量,
    2。在删除temp1之前,调用Deatch();
    大概,差不多了。
      

  4.   

    FromHandle是静态函数,调用时不需要类对象,因此你的
    temp=temp1.FromHandle(temphand); 
    可以改为:
    temp=CBitmap::FromHandle(temphand); 
    也正是因为如此,FromHandle调用的结果是返回到temp而不是temp1,因此你在最后进行的temp1.DeleteObject调用毫无意义,因为temp1没有与任何位图关联。正相反,后来的temp=NULL却出了问题:因为通过FromHandle使得temp与temphand关联,你这样冒失地将temp赋值为0,temp实际所代表的位图就丢失了。因此下面两句:
    temp1.DeleteObject();
    temp=NULL;
    应改为:
    temp->DeleteObject();
    整个过程中,temp1完全没有必要存在,可以删除。
    最后,你在函数入口处有:
    HBITMAP temphand=NULL;
    HBITMAP bitmap=NULL;
    这样的语句,那么后面两个if的判断是毫无意义的——因为它们永远是NULL。只有将这两个变量定义为静态的,if才有意义。但你的程序最后已经将它们删除,作为调试,可以加入这些话,最终Release的时候,这些话也完全可以去掉。
      

  5.   

    你的程序太乱了。
    我告诉你原理,你自己再改吧。
    位图的数据都是存在HBITMAP中的。所以,你显示位图后一定要将HBITMAP和CBitmap分离。
      

  6.   

    资源被消耗没了~~~~
    你的oldtemp没有释放掉吧~~
      

  7.   

    不要用通用DC;用CCLientDC算了。省心!!!
      

  8.   

    对了,azuo_lee()能看一下那个帮助的问题吗?
      

  9.   

    to azuo_lee() 
    大侠,你真的很牛!
    我的问题解决了,
    你能不能留下你的EMAIL或者是QQ号,不打扰的话,我可以请教你一下。
    我给你加分