在工作中遇到一个要实现动画按钮的问题,在网上搜索了一圈,也没有找到比较合适的解决方法。于是就自己花点时间写了一个。现在把实现方法贡献给大家,希望您有用。
实现方式为定义一个类“
CButtonUIEx
”,该类继承于“
CButtonUI
”。动画效果是用定时器来实现的,所以定义了两个定时器:一个用来播放鼠标进入动画,一个用于鼠标离开播放,其实就是逆序播放一遍。
#ifndef __UIBUTTONEX_H__
#define __UIBUTTONEX_H__
#pragma once
#define EVENT_ANIMA_ENTER_TIMERID UIMSG_USER+100 //鼠标进入按钮TimerID
#define EVENT_ANIMA_LEAVE_TIMERID UIMSG_USER+101 //鼠标离开按钮TimerID
class CButtonUIEx : public CButtonUI
{}
然后就是定义一个vector用于存放图片路径以及一个传入图片的接口。
.h文件
void SetAnimationImages(vector<DuiLib::CDuiString>);
vector<DuiLib::CDuiString> vecAnimation;
UINT m_nFrameCount; // 图片总帧数
UINT m_nFramePosition; // 当前放到第几帧
UINT m_nTimerSize; // 帧与帧之间间隔时间
BOOL m_bLeaveFlag;
.cpp文件
void CButtonUIEx::SetAnimationImages(vector<DuiLib::CDuiString> vecList)
{
vecAnimation = vecList;
m_nFrameCount = vecList.size();
}
这里是鼠标进入后的定时器TIMER以及帧处理方法
void CButtonUIEx::OnTimer(UINT_PTR idEvent)
{
if (idEvent != EVENT_ANIMA_ENTER_TIMERID