VC++实现输出GIF到窗体并显示GIF动画的方法
本文讲述了VC++在窗体中显示GIF动画的方法,这是主要代码部分,在这段代码中,VC++将使用GDI技术加载GIF图像,定义GUID数组、定义指针、初始化各成员变量、释放属性对象、释放GUID等资源等。
代码如下:
//加载GIF文件 void COutputGIFDlg::OnBrowse() { CFileDialog flDlg(TRUE, "", "", OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, "GIF|*.gif;||");//定义文件打开对话框 if (flDlg.DoModal() == IDOK) { CString szText; szText = flDlg.GetPathName(); m_FileName.SetWindowText(szText); m_pBmp = Bitmap::FromFile(szText.AllocSysString()); //加载GIF图像 szText.ReleaseBuffer(); m_nCount = m_pBmp->GetFrameDimensionsCount(); //获取帧维数 GUID *pGuids = new GUID[m_nCount]; //定义一个GUID数组 m_pBmp->GetFrameDimensionsList(pGuids,m_nCount); //获取图像帧的GUID m_FrameCount = m_pBmp->GetFrameCount(pGuids); //获取GIF帧数 UINT nSize; //定义一个整型变量 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); } } void COutputGIFDlg::OnTimer(UINT nIDEvent) { GUID Guid = FrameDimensionTime; //定义一个GUID CDC* pDC = GetDC(); //获取窗口的设备上下文 //定义一个内存画布 CMemDC dc(pDC, CRect(20, 50, m_pBmp->GetWidth()+20, m_pBmp->GetHeight()+50)); Graphics gh(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); } void COutputGIFDlg::OnCancel() { if (m_pBmp != NULL) { delete m_pBmp; m_pBmp = NULL; } CDialog::OnCancel(); }
栏 目:C语言
下一篇:C语言栈的表示与实现实例详解
本文标题:VC++实现输出GIF到窗体并显示GIF动画的方法
本文地址:https://www.xiuzhanwang.com/a1/Cyuyan/3625.html
您可能感兴趣的文章
- 01-10数据结构课程设计-用栈实现表达式求值的方法详解
- 01-10使用OpenGL实现3D立体显示的程序代码
- 01-10求斐波那契(Fibonacci)数列通项的七种实现方法
- 01-10C语言 解决不用+、-、×、÷数字运算符做加法
- 01-10使用C++实现全排列算法的方法详解
- 01-10用C++实现DBSCAN聚类算法
- 01-10深入全排列算法及其实现方法
- 01-10全排列算法的非递归实现与递归实现的方法(C++)
- 01-10用C语言实现单链表的各种操作(一)
- 01-10用C语言实现单链表的各种操作(二)
阅读排行
本栏相关
- 04-02c语言函数调用后清空内存 c语言调用
- 04-02func函数+在C语言 func函数在c语言中
- 04-02c语言的正则匹配函数 c语言正则表达
- 04-02c语言用函数写分段 用c语言表示分段
- 04-02c语言中对数函数的表达式 c语言中对
- 04-02c语言编写函数冒泡排序 c语言冒泡排
- 04-02c语言没有round函数 round c语言
- 04-02c语言分段函数怎么求 用c语言求分段
- 04-02C语言中怎么打出三角函数 c语言中怎
- 04-02c语言调用函数求fibo C语言调用函数求
随机阅读
- 01-10使用C语言求解扑克牌的顺子及n个骰子
- 01-10C#中split用法实例总结
- 01-10delphi制作wav文件的方法
- 04-02jquery与jsp,用jquery
- 08-05DEDE织梦data目录下的sessions文件夹有什
- 08-05织梦dedecms什么时候用栏目交叉功能?
- 01-11ajax实现页面的局部加载
- 08-05dedecms(织梦)副栏目数量限制代码修改
- 01-10SublimeText编译C开发环境设置
- 01-11Mac OSX 打开原生自带读写NTFS功能(图文