注册 登录
编程论坛 VC++/MFC

美化自己的对话框--MFC显示GIF动画图片

hlmzrdongdong 发布于 2009-11-25 16:15, 24862 次点击
如何让自己的对话框显得更加好看,增加一些动态元素,这是我专注于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的朋友可能无法打开。
只有本站会员才能查看附件,请 登录


一.显示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 编辑 ]
72 回复
#2
骗子男2009-11-25 16:48
楼主,我一直关注你的文章,很好,很强大,那个flash播放的受益匪浅,非常感谢!希望能够经常看到那你的文章
#3
ljz050103012009-11-25 23:23
牛人
#4
hlmzrdongdong2009-11-30 20:32
回复 2楼 骗子男
谢谢捧场。
#5
fredds2009-12-02 19:12
谢谢楼主  学习了
#6
骗子男2009-12-22 22:47
楼主,果然牛人
#7
scckj2009-12-24 11:45
我找你的方法做了,图片显示了,但是为什么图片没有动画效果呢?
#8
votvo2009-12-28 19:17
总是出现错误,‘GifPicture.exe 中的 0x10222dfd (msvcr80d.dll) 处未处理的异常: 0xC0000005: 读取位置 0x000003e8 时发生访问冲突’,不知道是怎么回事啊
#9
hlmzrdongdong2009-12-30 18:07
回复 6楼 骗子男
你说的情况我也遇到过。
把图片重新导入一次就可以行。
#10
hlmzrdongdong2009-12-30 18:10
回复 7楼 scckj
呵呵,这样的错误也许只有微软的人才明白。
#11
指手画脚2009-12-31 16:06
不错 收藏一些 呵呵
#12
gauxten2010-01-23 11:06
楼主牛人
#13
wo478903212010-02-01 08:35
MFC播放视频怎么弄?
#14
okmntf2010-03-28 11:40
厉害
#15
mojingda2010-04-12 20:57
VC6.0无法打开??...
#16
tanchunwu2010-04-19 20:16
楼主,我用的是vs2005,在导入gif资源时候,弹出自定义资源类型,随便写一个,就会提示,不是有效文件,资源添加不了
#17
2010-05-04 16:50
谢谢楼主!
#18
andywang20102010-05-16 13:02
好强,学习学习!
#19
zlw04172010-05-23 11:50
好东西,谢谢
#20
Alidesheng2010-05-26 18:28
多谢分享!!
#21
beachfish2010-06-29 12:14
不是一般的牛
#22
kalenw2010-08-31 17:29
谢谢哦,弄明白了不少东西,谢谢!但是还想请教一点楼主,这个GIF显示位置又怎么样调整呢?期待您不吝赐教,再次感谢,原谅我的愚笨
#23
qwz20082010-09-06 11:22
呵呵,美化一下,挺不错的,要不太单调了
#24
kang32522010-09-06 21:07
我照着做的,怎么就是不动呀!
重新装载资源也没用!
我用的就是2008!希望得到你的回复!
#25
sdslcl2010-09-26 19:06
谢谢分享!
学习啦!
#26
zhuxl242010-10-23 11:50
图片不能动。。。。。我用的是2008呀 lz的文件下载下来是可以动的  但自己照着lz的方法做出来的图片却动不了
#27
仙维2010-11-20 12:58
先下了看看
#28
zs8812072010-12-08 13:48
楼主 问下
为什么我用到我的项目里会提示
error C1083: 无法打开包括文件:“process.h”这个错误呢
请问怎么解决啊
#29
zs8812072010-12-08 15:32
我用的wince
#30
zhuhe2011-02-25 14:40
谢谢楼主  学习了!
#31
dellinbcg2011-03-05 23:45
看了LZ的文章受益匪浅,非常感谢!希望能够经常看到那你的文章。
#32
lovezp13142011-03-24 22:38
像牛人学习!
#33
yanxh162011-05-02 16:31
楼主太棒啦~~~~
#34
infant_lotus2011-05-10 19:05
我也按照lz的方法做了,编译没问题,运行无结果。断点设在Dlg的构造函数那里,结果报错同8楼。。。望高人指教
#35
cy67511082011-05-12 11:29
  正好需要这个教程 谢谢了  楼主辛苦了
#36
tthappy22011-05-13 11:06
tks
#37
coolsmile2011-05-24 09:45
谢谢楼主,花了一上午的时间,终于在楼主这里解决了问题
#38
阿甘愣子2011-09-12 10:23
!!!!!!!!!!!!!
#39
youxiao2011-09-14 11:50
lz vs2008 gif不能动
#40
abarnchan2011-09-15 21:07
没有动画效果,按照你的方法
#41
xinshouvc2011-10-17 14:44
正好需要,下载了来学写一下,谢谢楼主
#42
kfc_1122011-12-06 09:44
谢谢楼主了!!!!!!!!!!!!!!
#43
xiaomao8282012-05-08 11:10
正在优化,谢谢楼主分享
#44
kelemay10162012-05-16 11:12
版主,怎么将图片添加到工程啊
#45
cml2504509902012-06-10 14:23
,厉害厉害
#46
dp050430072012-07-04 13:12
谢谢了
#47
yifawu2012-07-27 16:16
2222333
#48
kuenior2012-08-01 14:22
完全折服
#49
me1012012-08-30 11:49
谢谢,正好要用显示gif图片。学习中,谢谢楼主
#50
BoySunshine2012-12-17 18:43
PictureEx.h和PictureEx.cpp这两个文件在哪?
#51
iBCCNName2012-12-18 16:49
给力啊~正需要这么一块功能
12