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

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

2012-12-30 
求助!!!网上找的方法,封到一个函数中后,就出了问题,高手来看看吧!!!void SHOWGIF(HWND Mwnd,int TIME){int

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


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);

热点排行