把这几句话放到函数末尾
if (temphand!=NULL)
{
DeleteObject(temphand);
temphand=NULL;
}
if (bitmap!=NULL)
{
DeleteObject(bitmap);
bitmap=NULL;
}
if (temphand!=NULL)
{
DeleteObject(temphand);
temphand=NULL;
}
if (bitmap!=NULL)
{
DeleteObject(bitmap);
bitmap=NULL;
}
2。在删除temp1之前,调用Deatch();
大概,差不多了。
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的时候,这些话也完全可以去掉。
我告诉你原理,你自己再改吧。
位图的数据都是存在HBITMAP中的。所以,你显示位图后一定要将HBITMAP和CBitmap分离。
你的oldtemp没有释放掉吧~~
大侠,你真的很牛!
我的问题解决了,
你能不能留下你的EMAIL或者是QQ号,不打扰的话,我可以请教你一下。
我给你加分