标题:美化自己的对话框--MFC显示GIF动画图片
只看楼主
hlmzrdongdong
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:湖北武汉
等 级:版主
威 望:1
帖 子:99
专家分:145
注 册:2008-10-24
结帖率:100%
 问题点数:0 回复次数:72 
美化自己的对话框--MFC显示GIF动画图片
如何让自己的对话框显得更加好看,增加一些动态元素,这是我专注于MFC之后忙着解决的问题。

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

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

这是本帖用到的一个例程,声明一下是在VS2008下做的,VC6.0的朋友可能无法打开。
GifPicture.rar (138.33 KB)


一.显示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动画。我的运行结果如下(由于是截屏的所以没有动画效果):


[ 本帖最后由 hlmzrdongdong 于 2009-11-25 16:17 编辑 ]
搜索更多相关主题的帖子: MFC 动画 对话框 GIF 
2009-11-25 16:15
骗子男
Rank: 2
等 级:论坛游民
帖 子:68
专家分:18
注 册:2009-3-8
得分:0 
楼主,我一直关注你的文章,很好,很强大,那个flash播放的受益匪浅,非常感谢!希望能够经常看到那你的文章
2009-11-25 16:48
ljz05010301
Rank: 2
等 级:论坛游民
帖 子:13
专家分:10
注 册:2009-10-28
得分:0 
牛人
2009-11-25 23:23
hlmzrdongdong
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:湖北武汉
等 级:版主
威 望:1
帖 子:99
专家分:145
注 册:2008-10-24
得分:0 
回复 2楼 骗子男
谢谢捧场。

京畿明月
2009-11-30 20:32
fredds
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2009-12-2
得分:0 
谢谢楼主  学习了
2009-12-02 19:12
骗子男
Rank: 2
等 级:论坛游民
帖 子:68
专家分:18
注 册:2009-3-8
得分:0 
楼主,果然牛人
2009-12-22 22:47
scckj
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2009-12-24
得分:0 
我找你的方法做了,图片显示了,但是为什么图片没有动画效果呢?
2009-12-24 11:45
votvo
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2009-12-25
得分:0 
总是出现错误,‘GifPicture.exe 中的 0x10222dfd (msvcr80d.dll) 处未处理的异常: 0xC0000005: 读取位置 0x000003e8 时发生访问冲突’,不知道是怎么回事啊
2009-12-28 19:17
hlmzrdongdong
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:湖北武汉
等 级:版主
威 望:1
帖 子:99
专家分:145
注 册:2008-10-24
得分:0 
回复 6楼 骗子男
你说的情况我也遇到过。
把图片重新导入一次就可以行。

京畿明月
2009-12-30 18:07
hlmzrdongdong
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:湖北武汉
等 级:版主
威 望:1
帖 子:99
专家分:145
注 册:2008-10-24
得分:0 
回复 7楼 scckj
呵呵,这样的错误也许只有微软的人才明白。

京畿明月
2009-12-30 18:10



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-293355-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.022336 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved