duilib 增加gif控件(基于gdi+,可控制播放暂停,自动设置大小)

转载请说明原出处,谢谢~~:http://blog.csdn.net/zhuhongshu/article/details/42502081


        因为项目需要我需要给duilib增加一个gif控件,目前已经有了gif控件有很多版本,我去搜集了一些控件,但是都没有自己满意的。原uilib库中已经有GifAnim控件,但是这个控件给出的控制功能不足,不可以控制播放、暂停、停止。当控件隐藏时也不会停止播放动画,会影响效率。


        于是在原GifAnim的基础上做了增强,增加了PlayGif、PauseGif、StopGif函数来控制播放、暂停、停止。增加autoplay属性控制控件初始时是否自动播放。


       GifAnim的属性如下:


	<GifAnim parent="Control" notifies="setfocus killfocus timer menu windowinit(root)">
		<Attribute name="bkimage" default="" type="STRING" comment="Gif动画图片路径"/>
		<Attribute name="autoplay" default="true" type="BOOL" comment="是否自动播放GIF动画"/>
		<Attribute name="autosize" default="false" type="BOOL" comment="是否根据图片自动设置控件大小"/>
	</GifAnim>


      xml代码对应为:


         <GifAnim name="gif" bkimage="0.gif" autoplay="true" autosize="true" width="100" height="100" />


      gif控件用gdi+函数来解析图片,所以要初始化gdi+接口,为了避免多次重复初始化gdi+,所以把初始化函数写到了CPaintManager的构造函数里。


      UIGifAnim.h源码如下:


#ifndef GifAnimUI_h__
#define GifAnimUI_h__

#pragma once

namespace DuiLib
{
	class CControl;

#define EVENT_TIEM_ID	100

	class UILIB_API CGifAnimUI : public CControlUI
	{
	public:
		CGifAnimUI(void);
		~CGifAnimUI(void);

		LPCTSTR	GetClass() const;
		LPVOID	GetInterface(LPCTSTR pstrName);
		void	DoInit() override;
		void	DoPaint(HDC hDC, const RECT& rcPaint) override;
		void	DoEvent(TEventUI& event) override;
		void	SetVisible(bool bVisible = true ) override;
		void	SetAttribute(LPCTSTR pstrName, LPCTSTR pstrValue) override;
		void	SetBkImage(LPCTSTR pStrImage);
	
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值