VC++实现输出GIF到窗体并显示GIF动画的方法
本文讲述了VC++在窗体中显示GIF动画的方法,这是主要代码部分,在这段代码中,VC++将使用GDI技术加载GIF图像,定义GUID数组、定义指针、初始化各成员变量、释放属性对象、释放GUID等资源等。
代码如下:
//加载GIF文件 voidCOutputGIFDlg::OnBrowse() { CFileDialogflDlg(TRUE,"","",OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT, "GIF|*.gif;||");//定义文件打开对话框 if(flDlg.DoModal()==IDOK) { CStringszText; szText=flDlg.GetPathName(); m_FileName.SetWindowText(szText); m_pBmp=Bitmap::FromFile(szText.AllocSysString());//加载GIF图像 szText.ReleaseBuffer(); m_nCount=m_pBmp->GetFrameDimensionsCount();//获取帧维数 GUID*pGuids=newGUID[m_nCount];//定义一个GUID数组 m_pBmp->GetFrameDimensionsList(pGuids,m_nCount);//获取图像帧的GUID m_FrameCount=m_pBmp->GetFrameCount(pGuids);//获取GIF帧数 UINTnSize;//定义一个整型变量 m_nCount=0;//初始化成员变量 m_pBmp->GetPropertySize(&nSize,&m_nDelay);//获取属性大小 PropertyItem*pItem=NULL;//定义属性指针 pItem=(PropertyItem*)malloc(nSize);//为属性指针分配合适的空间 m_pBmp->GetAllPropertyItems(nSize,m_nDelay,pItem);//获取属性信息 m_nDelay=((long*)pItem->value)[0];//获取第一帧的延时 free(pItem);//释放属性对象 delete[]pGuids;//释放GUID m_nIndex=0;//初始化成员变量 KillTimer(1); SetTimer(1,300,NULL); } } voidCOutputGIFDlg::OnTimer(UINTnIDEvent) { GUIDGuid=FrameDimensionTime;//定义一个GUID CDC*pDC=GetDC();//获取窗口的设备上下文 //定义一个内存画布 CMemDCdc(pDC,CRect(20,50,m_pBmp->GetWidth()+20,m_pBmp->GetHeight()+50)); Graphicsgh(dc.m_hDC);//定义一个图像对象 //向设备上下文中绘制图像 gh.DrawImage(m_pBmp,0,0,m_pBmp->GetWidth(),m_pBmp->GetHeight()); m_pBmp->SelectActiveFrame(&Guid,m_nIndex++);//设置下一帧 if(m_nIndex==m_FrameCount)//判断当前帧是否为尾帧 m_nIndex=0;//将当前帧设置为第一帧 CDialog::OnTimer(nIDEvent); } voidCOutputGIFDlg::OnCancel() { if(m_pBmp!=NULL) { deletem_pBmp; m_pBmp=NULL; } CDialog::OnCancel(); }