注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

分享,态度 ·~~

—— 十年太长,五年;如果可以回到五年前,你最想对那时候的自己说什么?

 
 
 

日志

 
 

C#实现闪动托盘图标示例  

2010-03-02 11:06:49|  分类: DotNet |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

在用户正在登录QQ或者使用Firemail邮件系统自动收取邮件的时候,托盘图标会闪动提示用户正在运行的任务。

闪动图标可以使用定时切换托盘图标的方式实现,托盘图标可以从ImageList控件中获取。在ImageList控件里面添加三个icon,第一个icon表示窗体启动以后的托盘图标。第二个和第三个图标分别表示当特定的任务发生的时候,定时切换的图标。

1)设置托盘的图标可以从ImageList控件中的Image对象转换为Icon对象,

        /// <summary>

        /// 设置托盘显示的图标

        /// </summary>

        /// <param name="index">图像列表中图片的索引</param>

        private void setIconImg(int index)

        {

            Image img = this.imgIcon.Images[index];

            Bitmap b = new Bitmap(img);

            Icon icon = Icon.FromHandle(b.GetHicon());

            this.niMain.Icon = icon;

        }

 

 

2)定时器事件实现图标的切换

       /// <summary>

        /// 定时器切换图标显示

        /// </summary>

        /// <param name="sender"></param>

        /// <param name="e"></param>

        private void tmrIcon_Tick(object sender, EventArgs e)

        {

            if (iconFlag)

            {

                this.setIconImg(1);

                iconFlag = !iconFlag;

            }

            else

            {

                this.setIconImg(2);

                iconFlag = !iconFlag;

 

            }

        }

 

 

3)窗体的最小化按钮和关闭按钮实现隐藏窗体的功能,窗体关闭时,会执行FormClosing 事件,释放与此窗体关联的所有资源。因此需要取消关闭事件,实现窗体的隐藏和托盘的显示功能。

        /// <summary>

        /// 关闭窗体时隐藏窗体显示托盘图标

        /// </summary>

        /// <param name="sender"></param>

        /// <param name="e"></param>

        private void FrmMain_FormClosing(object sender, FormClosingEventArgs e)

        {

            e.Cancel = true;

            this.Hide();

            this.niMain.Visible = true;

        }

 

4)托盘关联菜单有四个功能:

l         “显示” :显示主窗体、隐藏托盘图标。

l         “运行”:图标闪动效果,模拟任务正在运行。

l         “停止”:恢复初始化的图标,模拟任务停止。

l         “退出”:提示用户并退出应用系统。

完整的代码如下:

namespace NotifyIconDemo

{

    public partial class FrmMain : Form

    {

 

        //切换图片的标识

        private bool iconFlag = false;

        //系统是否运行

        private bool isRun = false;

        /// <summary>

        ///

        /// </summary>

        public FrmMain()

        {

            InitializeComponent();

            //设置icon显示的图片

            this.setIconImg(0);

        }

        /// <summary>

        /// 设置托盘显示的图标

        /// </summary>

        /// <param name="index">图像列表中图片的索引</param>

        private void setIconImg(int index)

        {

            Image img = this.imgIcon.Images[index];

            Bitmap b = new Bitmap(img);

            Icon icon = Icon.FromHandle(b.GetHicon());

            this.niMain.Icon = icon;

        }

 

        /// <summary>

        /// 显示主窗体

        /// </summary>

        /// <param name="sender"></param>

        /// <param name="e"></param>

        private void tsmiMain_Click(object sender, EventArgs e)

        {

            //显示主窗体

            this.Visible = true;

            this.WindowState = System.Windows.Forms.FormWindowState.Normal;

            //隐藏托盘图标

            this.niMain.Visible = false;

            this.Show();

        }

        /// <summary>

        /// 退出

        /// </summary>

        /// <param name="sender"></param>

        /// <param name="e"></param>

        private void tsmiExit_Click(object sender, EventArgs e)

        {

            //设置托盘的提示信息

            this.niMain.BalloonTipText = "成功退出Demo!";

            this.niMain.BalloonTipTitle = "退出";

            this.niMain.ShowBalloonTip(1000*3);

            //延迟退出

            Thread.Sleep(1000 * 2);

            //释放托盘图标资源

            this.niMain.Dispose();

            //终止线程

            Application.ExitThread();

        }

        /// <summary>

        /// 最小化时隐藏窗体,显示托盘图标

        /// </summary>

        /// <param name="sender"></param>

        /// <param name="e"></param>

        private void FrmMain_SizeChanged(object sender, EventArgs e)

        {

            if (this.WindowState == FormWindowState.Minimized)

            {

                this.Hide();

                this.niMain.Visible = true;

            }

 

        }

 

 

        /// <summary>

        /// 关闭窗体时隐藏窗体显示托盘图标

        /// </summary>

        /// <param name="sender"></param>

        /// <param name="e"></param>

        private void FrmMain_FormClosing(object sender, FormClosingEventArgs e)

        {

            e.Cancel = true;

            this.Hide();

            //this.ShowInTaskbar = false;//取消窗体在任务栏的显示

            this.niMain.Visible = true;

        }

        /// <summary>

        /// 加载窗体时隐藏窗体

        /// </summary>

        /// <param name="sender"></param>

        /// <param name="e"></param>

        private void FrmMain_Load(object sender, EventArgs e)

        {

            this.Hide();

        }

 

 

        /// <summary>

        /// 定时器切换图标显示

        /// </summary>

        /// <param name="sender"></param>

        /// <param name="e"></param>

        private void tmrIcon_Tick(object sender, EventArgs e)

        {

            if (!this.isRun)

            {

                return;

            }

            if (iconFlag)

            {

                this.setIconImg(1);

                iconFlag = !iconFlag;

            }

            else

            {

                this.setIconImg(2);

                iconFlag = !iconFlag;

            }

        }

        /// <summary>

        /// 点击运行菜单

        /// </summary>

        /// <param name="sender"></param>

        /// <param name="e"></param>

        private void tsmiRun_Click(object sender, EventArgs e)

        {

            this.tsmiRun.Enabled = false;

            this.tsmiStop.Enabled = true;

            //设置运行状态

            this.isRun = true;

        }

        /// <summary>

        /// 点击停止菜单

        /// </summary>

        /// <param name="sender"></param>

        /// <param name="e"></param>

        private void tsmiStop_Click(object sender, EventArgs e)

        {

            this.tsmiRun.Enabled = true;

            this.tsmiStop.Enabled = false;

            //设置为停止状态

            this.isRun = false;

            //恢复图标显示

            this.setIconImg(0);

        }

    }

}

 

【from 轻吻情缘的空间 http://blog.csdn.net/doug_wang/archive/2009/09/17/4563317.aspx】 

  评论这张
 
阅读(3265)| 评论(17)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017