使用layered窗口实现界面动画

本文介绍如何利用Layered窗口和几个基本动画类(movingwnd、flickerwnd、SequenceImageWnd)来实现界面的动态效果,如闪动图标、简单动画和窗口移动、渐隐等。通过组合这些动画类,可以灵活地创建复杂的动画过程,而无需修改原有界面逻辑。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 现在流行的界面,基本都会支持动画效果,如果你的界面库没有这方面的支持,可以使用layered窗口,实现一些动画效果。

先来介绍下常用的几个基本的动画效果:

1.闪动的图标,用于指引用户点击。

2.播放一个简单的动画:比如一个垃圾桶按钮点击后,会动态打开,甚至会从里面飞出来一个图标到界面上指定的位置,然后变成按钮出现。

3窗口从一个位置移动到界面上,关闭后渐隐

首先,创建一个layered窗口,支持几个简单的接口:

class CLayeredWnd : public CWindowImpl<CLayeredWnd, CWindow>
{

public:
    BOOL Init(HWND hParent);
    void SetBitmap(HBITMAP hBmp, enumStretchType Stretch);
    void Show();
    void Hide();
    void SetAlpha(BYTE byAlpha);
    void SetBounds(RECT rc);
    void Refresh();

}

通过组合的方法,可以实现movingwnd(移动窗口,可以指定起点位置大小,终点位置大小,移动持续时长,移动过程alpha的改变),flickerwnd(在一个位置上下(左右)晃动的窗口),SequenceImageWnd(播放多帧图片,支持倒序播放,循环播放)

这几个基本的窗口,组合起来,可以实现很多的动画效果,而且不需要修改界面本身的逻辑,是完全脱离在界面之外的动画。

基于上面的想法,我实现了一个动画系统,现在的做法是对每个动画,写了一个类来控制整个过程:比如先用movingwnd放大窗口,然后用flickerwnd闪烁。

后续还会完善这个动画系统,对动画的过程通过task来描述,每个task指定要做的动画以及动画结束后要执行的操作,将动画的过程一般化。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值