• 任务栏窗口和状态图标的闪动 z


    Demo程序:

    image

    实现任务栏窗体和图标的闪动:

    image

     

    整个程序是基于Windows Forms的,对于任务栏右下角状态图标的闪动,创建了一个类型:NotifyIconAnimator,基本上是包装了Windows Forms中的NotifyIcon类型,然后内部有个Timer,不断循环设置NotifyIcon的Icon属性从而实现图标的闪烁。使用起来很简单,开始动画方法:

    //开始闪烁,icons是图标列表,interval是Timer间隔,loopCount是闪烁次数,-1代表永远循环 publicvoid StartAnimation(Icon[] icons, int interval, int loopCount)

    停止动画方法是StopAnimation,直接调用就好。

    NotifyIconAnimator的构造函数需要NotifyIcon对象,同时在StartAnimation调用后,当前NotifyIcon的图标会被缓存,当StopAnimation被调用后,缓存的图标会重新还原到NotifyIcon对象上。

     

    对于窗口的闪烁,当然是直接调用FlashWindowEx Win32 API,这个函数在Windows XP中才有(Windows 2000可以忽略了吧)。具体API封装可以直接参考pinvoke.net,里面也有直接对Form类型的支持。

    还有一点,当当前窗口是活动窗口后调用FlashWindowEx的话,窗口标题栏会闪烁的,如果不希望这样,即只有在当前窗口是非活动窗口才要进行闪烁的话,需要额外调用GetForegroundWindow API,通过对比程序窗口和桌面活动窗口的Handle,如果不一样,说明程序窗口不是当前活动窗口,然后再调用FlashWindowEx即可,如下参考代码:

    //窗体中3秒后非活动闪烁窗口的按钮点击事件执行 //NativeMethods类型是Win32 API的封装类型,请参考源代码或者pinvoke.net privateasyncvoid button4_Click(object sender, EventArgs e) { //等3秒 awaitTask.Delay(3000); //判断Form的Handle是否是当前活动窗口的Handle if (this.Handle !=NativeMethods.GetForegroundWindow()) //如果是的话,执行FlashWindowEx NativeMethods.FlashWindowEx(this); }
  • 相关阅读:
    程序员都必读
    ia-64 vs x86-64
    Linux内核学习
    开源liscense对比
    列存储
    大数据科普
    [USACO1.5]数字三角形
    [USACO08FEB]酒店Hotel
    数的划分
    CodeForce 18D
  • 原文地址:https://www.cnblogs.com/zeroone/p/3708092.html
Copyright © 2020-2023  润新知