在MFC和ATL工程中加入GIF动画(CPictureEx,CPitureExWnd)
2016-05-23 15:02
381 查看
一、怎样使用MFC版的CPictureEx:
1、你的对话框中加入一个静态文本控件(Static Text)或图片控件(Picture Control),Group Box也可以;
2、给控件的ID改个名字如IDC_MYPICTURE;
3、利用ClassWizard给控件添加变量。如:Category-Control,Variable type-CStatic;
4、在对话框的头文件中用CPictureEx替换CStatic(当然不要忘记在你的工程中加入PictureEx.h和PictureEx.cpp,并#include "PictureEx.h");
5、在OnInitDialog(或者其他什么你喜欢的地方)加入下面的代码:
if (m_Picture.Load(_T("mypicture.gif")))
m_Picture.Draw();
6、欣赏一下你的动画:)
你可以像处理标准的CStatic一样处理CPictureEx,可以手动创建它(实际上,当你的工程窗口不是对话框时,你必须得这样),调用CPictureEx::Create(), 接着调用CPicureEx::Load()和CPicture::Draw()。
二、 ATL工程中加入GIF动画
ATL版的CPitureExWnd使用也是以上步骤,但是第三点中不同的是,没有ClassWizard的帮助,你须手工加入一个CPictureExWnd类型的变量,并加入以下代码在你的WM_INITDIALOG消息处理程序中:
HWND hWnd = GetDlgItem(IDC_MYPIC);
if (hWnd) {
m_wndBanner.SubclassWindow(hWnd);//m_wndBanner即手工添加的变量
}
之后,你可以调用CPi
4000
ctureExWnd::Load()和CPicureExWnd::Draw()。当然,你也可以直接调用CPictureExWnd::Create,CPictureExWnd只是一个普通的窗口,这个普通的窗口的窗口程序中含有一些扩展的函数而已。
可用的接口函数有:
BOOL Load(...) - 装载一个GIF并为显示准备一个对象;
BOOL Draw() - 显示GIF或GIF动画;
void Stop() - 停止动画;
void UnLoad() - 停止动画并释放所有资源;
void SetBkColor(COLORREF) - 设定背景颜色(透明区域);
COLORREF GetBkColor() - 取得背景颜色;
BOOL IsGIF() - 判断是否GIF;
BOOL IsAnimatedGIF() - 判断是否GIF动画;
BOOL IsPlaying() - 判断动画是否在播放中;
SIZE GetSize() - 获取当前图的尺寸;
int GetFrameCount() - 获取当前动画的帧数;
BOOL GetPaintRect(RECT *lpRect) - 获取当前绘图区域;
BOOL SetPaintRect(const RECT *lpRect) - 设定绘图区域;
CPictureEx[Wnd]::Load有三个版本的重载函数:
BOOL Load(LPCTSTR szFileName);//此版本重载函数的参数是图的路径,返回值是成功已否的布尔值。
BOOL Load(HGLOBAL hGlobal, DWORD dwSize);//此版本的参数是GlobalAlloc使用GMEM_MOVABLE标记分配的全局内存块的句柄及其大小。该函数不会释放内存,所以记得用GlobalFree释放内存。
BOOL Load(LPCTSTR szResourceName,LPCTSTR szResourceType);//此版本从资源中获取图片名和图片类型。例如:
m_Picture.Load(MAKEINTRESOURCE(IDR_MYPIC),_T("GIFTYPE"));
注:装载一个图片后,调用CPictureEx[Wnd]::Draw()显示它。如果是一个GIF动画,Draw函数会建立一个背景线程去播放动画;如果是一个静止的图片,它会被OleLoadPicture/IPicture直接显示。你可以调用CPictureEx[Wnd]::Stop()在任意时刻停止播放线程。如果你不但想终止播放线程,还想释放资源,使用CPictureEx[Wnd]::UnLoad()。注意:CPictureEx[Wnd]::Load自动调用Unload()函数。
缺省地,背景被COLOR_3DFACE填充(即对话框的背景颜色)。如果你需要改变背景颜色,可在调用CPictureEx[Wnd]::Load()后调用CPictureEx[Wnd]::SetBkColor(COLORREF)。
1、你的对话框中加入一个静态文本控件(Static Text)或图片控件(Picture Control),Group Box也可以;
2、给控件的ID改个名字如IDC_MYPICTURE;
3、利用ClassWizard给控件添加变量。如:Category-Control,Variable type-CStatic;
4、在对话框的头文件中用CPictureEx替换CStatic(当然不要忘记在你的工程中加入PictureEx.h和PictureEx.cpp,并#include "PictureEx.h");
5、在OnInitDialog(或者其他什么你喜欢的地方)加入下面的代码:
if (m_Picture.Load(_T("mypicture.gif")))
m_Picture.Draw();
6、欣赏一下你的动画:)
你可以像处理标准的CStatic一样处理CPictureEx,可以手动创建它(实际上,当你的工程窗口不是对话框时,你必须得这样),调用CPictureEx::Create(), 接着调用CPicureEx::Load()和CPicture::Draw()。
二、 ATL工程中加入GIF动画
ATL版的CPitureExWnd使用也是以上步骤,但是第三点中不同的是,没有ClassWizard的帮助,你须手工加入一个CPictureExWnd类型的变量,并加入以下代码在你的WM_INITDIALOG消息处理程序中:
HWND hWnd = GetDlgItem(IDC_MYPIC);
if (hWnd) {
m_wndBanner.SubclassWindow(hWnd);//m_wndBanner即手工添加的变量
}
之后,你可以调用CPi
4000
ctureExWnd::Load()和CPicureExWnd::Draw()。当然,你也可以直接调用CPictureExWnd::Create,CPictureExWnd只是一个普通的窗口,这个普通的窗口的窗口程序中含有一些扩展的函数而已。
可用的接口函数有:
BOOL Load(...) - 装载一个GIF并为显示准备一个对象;
BOOL Draw() - 显示GIF或GIF动画;
void Stop() - 停止动画;
void UnLoad() - 停止动画并释放所有资源;
void SetBkColor(COLORREF) - 设定背景颜色(透明区域);
COLORREF GetBkColor() - 取得背景颜色;
BOOL IsGIF() - 判断是否GIF;
BOOL IsAnimatedGIF() - 判断是否GIF动画;
BOOL IsPlaying() - 判断动画是否在播放中;
SIZE GetSize() - 获取当前图的尺寸;
int GetFrameCount() - 获取当前动画的帧数;
BOOL GetPaintRect(RECT *lpRect) - 获取当前绘图区域;
BOOL SetPaintRect(const RECT *lpRect) - 设定绘图区域;
CPictureEx[Wnd]::Load有三个版本的重载函数:
BOOL Load(LPCTSTR szFileName);//此版本重载函数的参数是图的路径,返回值是成功已否的布尔值。
BOOL Load(HGLOBAL hGlobal, DWORD dwSize);//此版本的参数是GlobalAlloc使用GMEM_MOVABLE标记分配的全局内存块的句柄及其大小。该函数不会释放内存,所以记得用GlobalFree释放内存。
BOOL Load(LPCTSTR szResourceName,LPCTSTR szResourceType);//此版本从资源中获取图片名和图片类型。例如:
m_Picture.Load(MAKEINTRESOURCE(IDR_MYPIC),_T("GIFTYPE"));
注:装载一个图片后,调用CPictureEx[Wnd]::Draw()显示它。如果是一个GIF动画,Draw函数会建立一个背景线程去播放动画;如果是一个静止的图片,它会被OleLoadPicture/IPicture直接显示。你可以调用CPictureEx[Wnd]::Stop()在任意时刻停止播放线程。如果你不但想终止播放线程,还想释放资源,使用CPictureEx[Wnd]::UnLoad()。注意:CPictureEx[Wnd]::Load自动调用Unload()函数。
缺省地,背景被COLOR_3DFACE填充(即对话框的背景颜色)。如果你需要改变背景颜色,可在调用CPictureEx[Wnd]::Load()后调用CPictureEx[Wnd]::SetBkColor(COLORREF)。
相关文章推荐
- mybatis学习笔记(零)mybatis学习之HelloWorld
- 某资产配置平台系统方案建设规划
- win7 vs2015环境 GDAL2.0.1 64位 编译解决
- CV_EXPORT定义的作用,lib及dll的区别
- chrome 文件上传路径问题
- 应用内存优化之OnLowMemory&OnTrimMemory
- redis实现増删改、查询过滤功能
- 互联网协议认识
- 前端工程师必备技能汇总
- 去除tabbar的灰线
- STL简介
- js刷新页面方法大全
- Android:ImageView代码设置background和src
- 简说ES6中的变量定义:let、const
- 图片控件,动画控件
- execute immediate 运行动态SQL
- Oracle Database的安装与卸载
- Eclipse中使用SVN
- Java 获取字符串中第N次出现的字符位置
- JBOSS集群技术升级版解决方案分享(图示篇)