duilib和定时器实现简单的帧动画

2017-09-06  本文已影响362人  彦子凡

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那么简单.

上一篇下一篇

猜你喜欢

热点阅读