动态gif文件中的每幅图片,我们可以用这样的结构到保存:
typedef struct tagTImageInfo { HBITMAP hBitmap; //位图句柄 int nX; //位图宽 int nY; //位图高 int delay; //延时时间,单位ms bool alphaChannel;//是否支持透明 CStdString sResType; DWORD dwMask; //透明颜色值 } TImageInfo;
class CGifHandler { public: CGifHandler(); virtual ~CGifHandler(); int GetFrameCount(); void AddFrameInfo(TImageInfo* pFrameInfo); TImageInfo* GetNextFrameInfo(); TImageInfo* GetCurrentFrameInfo(); TImageInfo* GetFrameInfoAt(int index); private: CStdPtrArray ImageInfos; int nCurrentFrame; int nFrameCount; bool isDeleting; };
CControlUI* WindowBase::CreateControl(LPCTSTR pstrClass) { if( _tcscmp(pstrClass, L"ButtonGif") == 0 ) { return new CButtonGifUI; } return NULL; }
并在创建是,把this指针传过去。
CControlUI* pRoot = builder.Create(_T("mainWindow.xml"), (UINT)0, this, &m_paintManager);
在CDialogBuilder::_Parse函数中有这样一段代码
if( pControl == NULL && m_pCallback != NULL ) { pControl = m_pCallback->CreateControl(pstrClass); }
<ButtonGif name="loginloading" pos="60,100,0,0" float="true" height="140" width="140" align="center" NormalGifFile="loading.gif"/>所以如果要在CListUI中显示动画,记得写回调并把this指针传给create函数。
PS: 关注公众号,技术分享,学习交流