本帖则将讨论如何在MFC的对话框里显示GIF动画图片。一些关于传统控件的美化方法正在研究当中会陆续发帖的。

这是本帖用到的一个VS2008例程。

 附件
 GifPicture.rar (138.1 KB)

上传时间:2009-11-25 16:15
下载次数:1173

一.显示GIF图片控件类的介绍:

   无论是在VC6.0还是在VS2008中,都没有控件能显示GIF动画图片。能显示一些静态图片的只是Picture控件。本例程用到的GIF动画显示控件类是PictureEX。其定义文件是PictureEx.h,类的实现文件是PictureEx.cpp。有关该类的成员函数和方法说明如下:

程序代码:
BOOL Load(...) ——加载GIF 并准备绘画对象; 
BOOL Draw() ——绘制图像或继续动画显示。
void Stop() ——停止动画;
void UnLoad() —— 停止动画并释放所有资源;
void SetBkColor(COLORREF) ——为透明区域设置填充颜色; 
COLORREF GetBkColor() ——获取当前填充颜色;
BOOL IsGIF() —— 如果当前图像是 GIF 则返回 TRUE;
BOOL IsAnimatedGIF() ——如果当前图像是动画 GIF,则返回TRUE;
BOOL IsPlaying() ——如果当前图像是以动画方式显示则返回TRUE; 
SIZE GetSize() ——返回图像尺寸。
int GetFrameCount() ——返回当前图像的帧数量;
BOOL GetPaintRect(RECT *lpRect) ——返回当前绘制的矩形。
BOOL SetPaintRect(const RECT *lpRect) ——设置当前绘制的矩形;

二.编程应用步骤:

    1.首先在网上下载两个小的GIF动画图片,由于VS2008无法识别这样的文件的扩展名,会弹出输入文件类型的扩展名,输入一个字符串即可。这个字符窜在后面的代码中会用到。

2.建立一个对话框的MFC工程。将下载的资源文件拷贝至工程目录的Res文件夹下,然后用添加资源的方法将这两个资源文件加载到你的工程中。

3.这一步非常重要。首先在我的例程里拷贝PictureEx.h和PictureEx.cpp到你的工程目录下,然后在将该类添加到你的工程中。

4.在对话框面板上添加两个Picture控件分别给它们建立Control型的Static变量。我的例程里名字分别为m_gifpicture和m_girl。

5.一切准备工作以经完成。下面是添加代码:

在对话框类定义文件(我的例程是GifPictureDlg.h)中添加一句:

程序代码:
#include "PictureEx.h"   

找到下面的两行:

程序代码:
   Cstatic m_gifpicture;
    Cstatic m_girl;

将其改为:

程序代码:
    CPictureEx m_gifpicture;
    CPictureEx m_girl;

在对话框的实现文件(我的例程是GifPictureDlg.cpp)中的对话框初始化函数BOOL CGifPictureDlg::OnInitDialog()中添加如下代码:

程序代码:
if (m_gifpicture.Load(MAKEINTRESOURCE(IDR_GIF1),_T("gif")))//IDR_GIF1是添加的GIF动画的ID号。gif即是在添加时所键入的文件类型
        m_gifpicture.Draw();
if (m_girl.Load(MAKEINTRESOURCE(IDR_GIF2),_T("gif")))
        m_girl.Draw();

下面编译该工程并运行一下,可以看到GIF动画。我的运行结果如下(由于是截屏的所以没有动画效果):

 
 
 
 
 题外话
如何让自己的对话框显得更加好看,增加一些动态元素,这是我专注于MFC之后忙着解决的问题。

在本论坛的本版块里,我陆续的发了两个这方面的帖子,列举如下:
1.如何创建XP风格的按钮控件 http://bbs.bccn.net/thread-292048-1-1.html
2.MFC显示Flash动画的编程实现 http://bbs.bccn.net/thread-292047-1-1.html

 
 
 
 
 
 
 
 

MFC显示GIF动画图片的更多相关文章

  1. j-query应用---鼠标悬停不同文字显示不同背景图片banner动画

    源代码部分:注意事项:样式表的引用的路径要一致. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" ...

  2. MFC入门(三)-- MFC图片/文字控件(循环显示文字和图片的小程序)

    惯例附上前几个博客的链接: MFC入门(一)简单配置:http://blog.csdn.net/zmdsjtu/article/details/52311107 MFC入门(二)读取输入字符:http ...

  3. Label,PushButton,ToolButton 实现动态图片按钮,Label显示gif动画

    .h文件 public: explicit event(QWidget *parent = 0); ~event(); QImage image; QLabel *label; QLabel *lab ...

  4. MFC 显示CImg图片

    很多示例关于CImg都是基于控制台的,如何把它用于MFC中显示. Problem:直接按照控制台示例写入MFC程序中,当程序执行完display后,其后面的代码便不再执行. solution:开辟新的 ...

  5. 一个Android上的以滑动揭示的方式显示并切换图片的View

    SlideView是一个Android上的以滑动揭示的方式显示并切换图片的View,以视觉对比的方式把一套相似的图片展示出来. 示例 翻页图片揭示效果: 特性 设置一组(List<ImageIn ...

  6. Android中显示gif动态图片

    在android中显示一个静态图片比如png jpg等等都很方便,但是如果要显示一个gif 动态图片就需要进行一些处理. 本文是采用自定义view 然后进行重新onDraw方法来实现 首先自定义Vie ...

  7. iOS:Gif动画功能(显示gif动画、获取gif动画时长、获取gif动画执行次数)

    一.简单介绍 gif动画是iOS开发中很常用的一个功能,有的是为了显示加载视频的过程,更多的是为了显示一个结果状态(动画更直观). 那么如何执行gif动画,方法有很多.(这里只写一下方法三,前两种之前 ...

  8. MFC 对话框Picture Control(图片控件)中静态和动态显示Bmp图片

    版权声明:本文为博主原创文章,转载请注明CSDN博客源地址! 共同学习,一起进步~ https://blog.csdn.net/Eastmount/article/details/26404733   ...

  9. MFC显示bmp图像

    有了bmp文件读写的基础,我们就能够開始用MFC显示BMP图片了. 在这里,事实上微软为我们提供了一个实现bmp文件显示的框架,名叫diblook,我们能够先下载下来看看. 以下上链接:DIBLOOK ...

随机推荐

  1. Simple Addition Permits Voltage Control Of DC-DC Converter's Output

    http://electronicdesign.com/power/simple-addition-permits-voltage-control-dc-dc-converters-output In ...

  2. Windows Server 2012 R2 两个奇葩问题的解决

    1. 服务管理器一打开就崩溃此问题由Intel HD Graphics显卡驱动不兼容引起,卸载掉驱动,仅使用微软基本显示驱动.等待Intel更新符合WDDM 1.3规范的驱动 2. 不能设置静态IP. ...

  3. R类

    资源文件的使用分为在代码中使用和在其他资源文件中引用该资源文件.在我们编译一个Android应用时,Android会自动生成一个R类,在该类中根据不同的资源类型又生成了相应的内部类,该类包含了系统中使 ...

  4. java Integer包装类装箱的一个细节

    原文:https://www.cnblogs.com/JackPn/p/9392145.html java有八个基本数据类型,每个都有对应的一个包装类,比如int对应的Integer.从jdk1.5开 ...

  5. FAQ:领域服务和应用服务的职责是什么?

    问答部分 问: 领域服务的职责是什么? 答: 夸聚合实例业务逻辑. 没办法合理放到实体中的其它业务逻辑. 问: 领域服务的设计原则是什么? 答: 用来组织业务逻辑. 面向业务逻辑. 细粒度. 内部视图 ...

  6. JAVA泛型通配符T,E,K,V区别,T以及Class<T>,Class<?>的区别以及接口里default方法

    使用大写字母A,B,C,D......X,Y,Z定义的,就都是泛型,把T换成A也一样,这里T只是名字上的意义而已 ? 表示不确定的java类型 T (type) 表示具体的一个java类型 K V ( ...

  7. Spark源码分析:多种部署方式之间的区别与联系(转)

    原文链接:Spark源码分析:多种部署方式之间的区别与联系(1) 从官方的文档我们可以知道,Spark的部署方式有很多种:local.Standalone.Mesos.YARN.....不同部署方式的 ...

  8. 无法加载协定为“JavaWebService.UserInfoDelegate”的终结点配置部分,因为找到了该协定的多个终结点配置。请按名称指示首选的终结点配置部分。

    原因是: 在vs 2008中使用C#,多次添加/删除服务引用后,app.config文件并不会自动修改, 在添加/删除后,会生成多个“endpoint”,手工删除即可. app.config中的内容: ...

  9. poj 3237(树链剖分+线段树)

    题意:给一棵树,三种操作.将第i条边的权值改为v,将a到b的路径上的边的权值全部取反,求a到b路径上边的权值的最大值. 思路:明显的树链剖分,加上线段树的操作.因为有取反的操作所以每个区间要记录最大值 ...

  10. git stash笔记

    日常工作中经常会需要放下手头上的工作,转而去修改之前的某一个bug,此时就需要将现有的改动添加到staging area git add . 然后将这些改动暂时放入一个stack中: git stas ...