美文网首页
duilib和定时器实现简单的帧动画

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

作者: 彦子凡 | 来源:发表于2017-09-06 20:08 被阅读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那么简单.

    相关文章

      网友评论

          本文标题:duilib和定时器实现简单的帧动画

          本文链接:https://www.haomeiwen.com/subject/cfivjxtx.html