首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

!网上找的方法,封到一个函数中后,就出了有关问题,高手来看看吧!

2012-02-25 
求助!!!网上找的方法,封到一个函数中后,就出了问题,高手来看看吧!!! - C++ Builder / Windows SDK/APIC/C+

求助!!!网上找的方法,封到一个函数中后,就出了问题,高手来看看吧!!! - C++ Builder / Windows SDK/API

C/C++ code
void SHOWGIF(HWND Mwnd,int TIME){    int Frame=0;    int WIDE,HIGH;    HDC hdc;    RECT rt;    hdc=GetDC(Mwnd);    Graphics gh(hdc);//    GetWindowRect(Mwnd,&rt);//    WIDE=rt.right-rt.left;//    HIGH=rt.bottom-rt.top;    Image image(L".//PIC//2.gif");//    gh.DrawImage(&image,0,0,image.GetWidth(),image.GetHeight());    //以下干什么,我也不知道。。。。。,不过每运行一次会导致内存增加,问题应该在这里    UINT count = 0;    count = image.GetFrameDimensionsCount();    GUID *pDimensionIDs=(GUID*)new GUID[count];    image.GetFrameDimensionsList(pDimensionIDs, count);    WCHAR strGuid[39];    StringFromGUID2(pDimensionIDs[0], strGuid, 39);    UINT frameCount=image.GetFrameCount(&pDimensionIDs[0]);    delete []pDimensionIDs;    int size =image.GetPropertyItemSize(PropertyTagFrameDelay);    PropertyItem* pItem = NULL;    pItem = (PropertyItem*)malloc(size);    image.GetPropertyItem(PropertyTagFrameDelay,size,pItem);    UINT fcount=0;    GUID Guid = FrameDimensionTime;//到此貌似干完了,那就show吧!//play:    do    {        gh.DrawImage(&image,0,0,image.GetWidth(),image.GetHeight());        //重新设置当前的活动数据帧        image.SelectActiveFrame(&Guid,fcount++);  //      if(fcount == frameCount) //frameCount是上面GetFrameCount返回值  //             fcount= 0;     //如果到了最后一帧数据又重新开始        //计算此帧要延迟的时间        long lPause = ((long*)pItem->value)[fcount]*10;        Sleep(lPause);//这里简单使用了sleep    }while(fcount!=frameCount);//    delete image;//    delete gh;    DeleteObject(&image);    DeleteObject(pItem);    DeleteObject(&Guid);//删除对象    ReleaseDC(Mwnd,hdc);}



总结:
1.每次调用这个函数内存会增加,不会被释放,于是我采用各种方法,结果都没用,
2.我记得一个函数调用后结束,它的局部变量不是都该不自动释放了吗?我又没有static 呀??
3.我是菜鸟。。。

[解决办法]
我认为在请教他人之前,先要说清楚自己想干什么,然后是怎么个思路,最终问题在哪里被卡住了。

然后大家才容易帮到你。

[解决办法]
至少这句
DeleteObject(pItem);
应改为
free(pItem);

热点排行