C# 托盘图标闪烁

在用户正在登录QQ或者使用Firemail邮件系统自动收取邮件的时候,托盘图标会闪动提示用户正在运行的任务。闪动图标可以使用定时切换托盘图标的方式实现,托盘图标可以从ImageList控件中获取。在ImageList控件里面添加三个icon,第一个icon表示窗体启动以后的托盘图标。第二个和第三个图标分别表示当特定的任务发生的时候,定时切换的图标。

  1 using System;
  2 using System.Collections.Generic;
  3 using System.ComponentModel;
  4 using System.Data;
  5 using System.Drawing;
  6 using System.Text;
  7 using System.Windows.Forms;
  8 using System.Threading;
  9 
 10 namespace JajaWeixin.MyClient
 11 {
 12     public partial class Flashing : Form
 13     {
 14         //切换图片的标识
 15         private bool iconFlag = false;//加载图标切换状态是停止状态
 16 
 17         //系统是否运行
 18         private bool isRun = false;//加载状态运行是停止
 19 
 20         //设置icon显示的图片
 21         public Flashing()
 22         {
 23             InitializeComponent();
 24             this.setIconImg(0);//加载窗体时托盘显示的图标是下标为0的那张图片
 25         }
 26         
 27         //客户端查询订单每隔5秒
 28         private void timer_dingdanchaxun_Tick(object sender, EventArgs e)
 29         {
 30 
 31             string jiudianId = "201406261626";
 32             string objGuid = Convert.ToString(System.Guid.NewGuid());
 33             string result = jiudianId + objGuid;
 34             string desString = DESEncrypt.Encrypt(result);
 35             mylocalhost.MyWebService serviceone = new mylocalhost.MyWebService();
 36             string str = serviceone.Messagetoremind(desString);
 37             //MessageBox.Show(serviceone.Messagetoremind(desString));
 38             //return;
 39             if (str != "")
 40             {
 41                 this.isRun = true;//开始闪烁
 42             }
 43             else
 44             {
 45                 this.isRun = false;
 46             }
 47         }
 48 
 49         //设置托盘的图标可以从Image对象转换为Icon对象
 50         private void setIconImg(int index)
 51         {
 52             Image img=this.imgIcon.Images[index];
 53             Bitmap b = new Bitmap(img);
 54             Icon icon = Icon.FromHandle(b.GetHicon());
 55             this.niMain.Icon = icon;
 56         }
 57 
 58         //显示主窗体
 59         private void tsmiMain_Click(object sender, EventArgs e)
 60         {
 61             //显示主窗体
 62             this.Visible = true;
 63             this.WindowState = System.Windows.Forms.FormWindowState.Normal;
 64             //隐藏托盘图标
 65             this.niMain.Visible = false;//显示主窗体的时候,托盘图标隐藏
 66             this.Show();//主窗体显示
 67         }
 68 
 69         //退出
 70         private void tsmiExit_Click(object sender, EventArgs e)
 71         {
 72             //设置托盘的提示信息
 73             this.niMain.BalloonTipText = "成功退出!";
 74             this.niMain.BalloonTipTitle = "退出";
 75             this.niMain.ShowBalloonTip(1000 * 3);//在任务栏中持续显示气球提示的指定时间
 76             //延迟退出
 77             Thread.Sleep(1000 * 2);
 78             //释放托盘图标资源
 79             this.niMain.Dispose();
 80             //终止线程
 81             Application.ExitThread();
 82         }
 83 
 84         //最小化时隐藏窗体,显示托盘图标
 85         private void Flashing_SizeChanged(object sender, EventArgs e)
 86         {
 87             if (this.WindowState == FormWindowState.Minimized)
 88             {
 89                 this.Hide();
 90                 this.niMain.Visible = true;
 91             }
 92         }
 93 
 94         //窗体的最小化按钮和关闭按钮实现隐藏窗体的功能,窗体关闭时,会执行FormClosing 事件,
 95         //释放与此窗体关联的所有资源。因此需要取消关闭事件,实现窗体的隐藏和托盘的显示功能。
 96         private void Flashing_FormClosing(object sender, FormClosingEventArgs e)
 97         {
 98             e.Cancel = true;
 99             this.Hide();
100             //this.ShowInTaskbar = false;//取消窗体在任务栏的显示
101             this.niMain.Visible = true;
102         }
103 
104         //加载窗体是隐藏窗体
105         private void Flashing_Load(object sender, EventArgs e)
106         {
107             this.Hide();
108         }
109 
110         //定时器切换图标显示
111         private void tmrIcon_Tick(object sender, EventArgs e)
112         {
113             if (!this.isRun)
114             {
115                 return;
116             }
117             if (iconFlag)
118             {
119                 this.setIconImg(1);
120                 iconFlag = !iconFlag;
121             }
122             else
123             {
124                 this.setIconImg(2);
125                 iconFlag = !iconFlag;
126             }
127         }
128 
129         //点击运行菜单
130         private void tsmiRun_Click(object sender, EventArgs e)
131         {
132             this.tsmiRun.Enabled = false;//运行按钮不可用
133             this.tsmiStop.Enabled = true;//停止按钮可用
134             //设置运行状态
135             //this.isRun = true;//开始闪烁
136             this.timer_dingdanchaxun.Enabled = true;
137         }
138 
139         //点击停止菜单
140         private void tsmiStop_Click(object sender, EventArgs e)
141         {
142             this.tsmiRun.Enabled = true;
143             this.tsmiStop.Enabled = false;
144             //设置为停止状态
145             this.isRun = false;
146             this.timer_dingdanchaxun.Enabled = false;
147             //恢复图标显示
148             this.setIconImg(0);
149         }
150 
151     }
152 }

 效果如图:

右击托盘图标

转载于:https://www.cnblogs.com/liubeimeng/p/3884873.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值