码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2014-05-10 01:51:19      阅读:287      评论:0      收藏:0      [点我收藏+]

标签:style   blog   class   code   tar   color   

Demo程序:

bubuko.com,布布扣

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

bubuko.com,布布扣

 

整个程序是基于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); }

任务栏窗口和状态图标的闪动 z,布布扣,bubuko.com

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

标签:style   blog   class   code   tar   color   

原文地址:http://www.cnblogs.com/zeroone/p/3708092.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!