duilib自己原生的库是不支持动画,经过后来很多人的修改之后慢慢的支持动画,但是有时候对于一些简单的变换图片的帧动画,一些简单的变化数字的帧动画,完全没有必要去把人家封装的那一套带有动画的库,直接就用duilib和定时器实现就ok了.
示例:
比如常见的倒计时动画,我们只要去变换图片或者去变换其中的数字就可以了.就只需要简单的设置一个定时器,然后定时器消息中计数,计数达到一定去销毁定时器.或者要提前也可以手动去销毁.废话不多说,直接上代码:
- 创建定时器
#define NTIMEEVENT 10000 //定时器的ID
#define NTIMER 1000 //定时器的执行时间,单位ms
::SetTimer(GetHWND(), NTIMEEVENT, NTIMER, NULL);
- 定时器的消息响应
LRESULT 类名::HandleCustomMessage(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
LRESULT lRes = 0;
bHandled = FALSE;
switch (uMsg)
{
case WM_TIMER:
{
m_nCount -= 1;//定义计数的成员变量
if(wParam == NTIMEEVENT)
{
CDuiString szBkImage;
szBkImage.Format("picture/Countdown/count%d.png", m_nCount);
if (m_pLabel)//你要变换的控件
{
m_pLabel->SetBkImage(szBkImage);
}
if (m_nCount == 0)//最后倒计时到0
{
::KillTimer(GetHWND(), NTIMEEVENT);//销毁定时器
Close(IDOK);
}
}
}
break;
}
return 0;
}
主要代码就只有这么多,如果对win32或者MFC的消息机制很熟悉的话,就像看1+1=2那么简单.
网友评论