C#实现闪动托盘图标效果的方法
本文实例讲述了C#实现闪动托盘图标效果的方法。分享给大家供大家参考,具体如下:
在用户正在登录QQ或者使用Firemail邮件系统自动收取邮件的时候,托盘图标会闪动提示用户正在运行的任务。
闪动图标可以使用定时切换托盘图标的方式实现,托盘图标可以从ImageList控件中获取。在ImageList控件里面添加三个icon,第一个icon表示窗体启动以后的托盘图标。第二个和第三个图标分别表示当特定的任务发生的时候,定时切换的图标。
(1)设置托盘的图标可以从ImageList控件中的Image对象转换为Icon对象
///<summary> ///设置托盘显示的图标 ///</summary> ///<paramname="index">图像列表中图片的索引</param> privatevoidsetIconImg(intindex) { Imageimg=this.imgIcon.Images[index]; Bitmapb=newBitmap(img); Iconicon=Icon.FromHandle(b.GetHicon()); this.niMain.Icon=icon; }
(2)定时器事件实现图标的切换
///<summary> ///定时器切换图标显示 ///</summary> ///<paramname="sender"></param> ///<paramname="e"></param> privatevoidtmrIcon_Tick(objectsender,EventArgse) { if(iconFlag) { this.setIconImg(1); iconFlag=!iconFlag; } else { this.setIconImg(2); iconFlag=!iconFlag; } }
(3)窗体的最小化按钮和关闭按钮实现隐藏窗体的功能,窗体关闭时,会执行FormClosing事件,释放与此窗体关联的所有资源。因此需要取消关闭事件,实现窗体的隐藏和托盘的显示功能。
///<summary> ///关闭窗体时隐藏窗体显示托盘图标 ///</summary> ///<paramname="sender"></param> ///<paramname="e"></param> privatevoidFrmMain_FormClosing(objectsender,FormClosingEventArgse) { e.Cancel=true; this.Hide(); this.niMain.Visible=true; }
(4)托盘关联菜单有四个功能:
①“显示”:显示主窗体、隐藏托盘图标。
②“运行”:图标闪动效果,模拟任务正在运行。
③“停止”:恢复初始化的图标,模拟任务停止。
④“退出”:提示用户并退出应用系统。
完整的代码如下:
namespaceNotifyIconDemo { publicpartialclassFrmMain:Form { //切换图片的标识 privatebooliconFlag=false; //系统是否运行 privateboolisRun=false; ///<summary> /// ///</summary> publicFrmMain() { InitializeComponent(); //设置icon显示的图片 this.setIconImg(0); } ///<summary> ///设置托盘显示的图标 ///</summary> ///<paramname="index">图像列表中图片的索引</param> privatevoidsetIconImg(intindex) { Imageimg=this.imgIcon.Images[index]; Bitmapb=newBitmap(img); Iconicon=Icon.FromHandle(b.GetHicon()); this.niMain.Icon=icon; } ///<summary> ///显示主窗体 ///</summary> ///<paramname="sender"></param> ///<paramname="e"></param> privatevoidtsmiMain_Click(objectsender,EventArgse) { //显示主窗体 this.Visible=true; this.WindowState=System.Windows.Forms.FormWindowState.Normal; //隐藏托盘图标 this.niMain.Visible=false; this.Show(); } ///<summary> ///退出 ///</summary> ///<paramname="sender"></param> ///<paramname="e"></param> privatevoidtsmiExit_Click(objectsender,EventArgse) { //设置托盘的提示信息 this.niMain.BalloonTipText="成功退出Demo!"; this.niMain.BalloonTipTitle="退出"; this.niMain.ShowBalloonTip(1000*3); //延迟退出 Thread.Sleep(1000*2); //释放托盘图标资源 this.niMain.Dispose(); //终止线程 Application.ExitThread(); } ///<summary> ///最小化时隐藏窗体,显示托盘图标 ///</summary> ///<paramname="sender"></param> ///<paramname="e"></param> privatevoidFrmMain_SizeChanged(objectsender,EventArgse) { if(this.WindowState==FormWindowState.Minimized) { this.Hide(); this.niMain.Visible=true; } } ///<summary> ///关闭窗体时隐藏窗体显示托盘图标 ///</summary> ///<paramname="sender"></param> ///<paramname="e"></param> privatevoidFrmMain_FormClosing(objectsender,FormClosingEventArgse) { e.Cancel=true; this.Hide(); //this.ShowInTaskbar=false;//取消窗体在任务栏的显示 this.niMain.Visible=true; } ///<summary> ///加载窗体时隐藏窗体 ///</summary> ///<paramname="sender"></param> ///<paramname="e"></param> privatevoidFrmMain_Load(objectsender,EventArgse) { this.Hide(); } ///<summary> ///定时器切换图标显示 ///</summary> ///<paramname="sender"></param> ///<paramname="e"></param> privatevoidtmrIcon_Tick(objectsender,EventArgse) { if(!this.isRun) { return; } if(iconFlag) { this.setIconImg(1); iconFlag=!iconFlag; } else { this.setIconImg(2); iconFlag=!iconFlag; } } ///<summary> ///点击运行菜单 ///</summary> ///<paramname="sender"></param> ///<paramname="e"></param> privatevoidtsmiRun_Click(objectsender,EventArgse) { this.tsmiRun.Enabled=false; this.tsmiStop.Enabled=true; //设置运行状态 this.isRun=true; } ///<summary> ///点击停止菜单 ///</summary> ///<paramname="sender"></param> ///<paramname="e"></param> privatevoidtsmiStop_Click(objectsender,EventArgse) { this.tsmiRun.Enabled=true; this.tsmiStop.Enabled=false; //设置为停止状态 this.isRun=false; //恢复图标显示 this.setIconImg(0); } } }
更多关于C#相关内容感兴趣的读者可查看本站专题:《C#常见控件用法教程》、《C#数据结构与算法教程》、《C#面向对象程序设计入门教程》及《C#程序设计之线程使用技巧总结》
希望本文所述对大家C#程序设计有所帮助。