显示GIF图像

本文介绍了一种使用CPictureEX类在MFC中显示GIF动画的方法,包括加载、播放和停止动画等功能,并提供了实现步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

GIF图像有多种显示方法。据我所知的有三种。

第一种:通过WEB Brower控件显示GIF图像(缺点:有滚动条,需要专门的祛滚动条。我这里有祛滚动条的Demo,需要的朋友请留言。)

第二种:就是我今天想要说的方法。CPictureEX类显示GIF(我看好这种方法,除了类比较大点,真的很好用。)

第三种:引用第三方控件。我只是听说过没有实际操作过这种方法。

 

我们来谈谈CPictureEX:

CPictueEx不仅可以显示GIF(包括GIF动画),还可以显示JPEG、BMP、WMF、ICO、CUR(所有OleLoadPicture能辨别的)。
基本接口如下:

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) ――设置当前绘制的矩形;

 

CPictureEX[Wnd]::Load 函数有三个版本:
BOOL Load(LPCTSTR szFileName);
该版本的Load函数从一个文件加载。返回类型表现加载是否胜利。
BOOL Load(HGLOBAL hGlobal, DWORD dwSize);

该版本的Load函数获取全局内存块句柄,用 GlobalAlloc 及 GMEM_MOVEABLE 标记分配内存。该函数不会释放分配的内存,所以不要忘却调用 GlobalFree。返回值表现加载是否胜利。 )
BOOL Load(LPCTSTR szResourceName,LPCTSTR szResourceType); )
该函数获取图像资源名和资源类型,例如:
m_Picture.Load(MAKEINTRESOURCE(IDR_MYPIC),_T("GIFTYPE"));  

 

 获取资源名和类型后加载对应的图像,并用 CPictureEx[Wnd]::Draw() 显示图像,如果图像是动画 GIF,该函数会启动一个背景处置线程完成动画显示,对于非动画 GIF,则用 OleLoadPicture/IPicture。显示。
  任何时候ni都可以用 CPictureEx[Wnd]::Stop() 函数终止背景处理线程。如果你不仅想结束动画,还想释放所有资源,使用 CPictureEx[Wnd]::UnLoad() (CPictureEx[Wnd]::Load() 主动调用UnLoad() )。
  缺省情形下,图像的背景是用 COLOR_3DFACE 填充的(对话框窗口的色彩),如果ni须要转变图像背景,调用 CPictureEx[Wnd]::Load()之后调用 CPictureEx[Wnd]::SetBkColor(COLORREF) 即可。
  使用 CPictureEx[Wnd]::SetPaintRect(const LPRECT) 函数可以设置一个剪贴矩形,LPRECT 参数告知类它应当显示图像的哪一部分。如果不设置剪贴矩形,则显示整幅图像。
  使用 Stop()/Draw() 可以结束动画GIF,调用Draw() 后可继续从停滞的那一帧继续显示。借助 IsPlaying() 函数,ni还可以知道当前是否在显示动画

 

下面我们用MFC来做个测试:

1:新建一个对话框工程(我这里是GIF),工程中加入PictureEx.h和PictureEx.cpp.这个类可以在网上下载到。
网址:http://d.download.youkuaiyun.com/down/1458419/tonypioneer

2:在你的对话框中加入一个静态文本控件(Static Text)或图片控件(Picture Control),Group Box也可以;   

3:给控件的ID改个名字如IDC_PICTURE,并关联变量m_Picture;    

4:在对话框的头文件中用CPictureEx替换CStatic,包含头文件#include "PictureEx.h";   

5:在OnInitDialog(或者其他什么你喜欢的地方)加入下面的代码:   if (m_Picture.Load(_T("mypicture.gif")))   

   m_Picture.Draw();   

这样就可以了:

效果图如下:

 

 

有兴趣的朋友可以参考更多的资料:

http://vcer.net/1076417661390.html

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值