WPF初探——利用Winform库中的NotifyIcon实现托盘小程序

自定义NotifyIcon教程
本文介绍了一种在.NET中自定义NotifyIcon(托盘图标)的方法,并提供了完整的代码示例,包括如何设置托盘图标的属性、响应鼠标点击事件及关联菜单等。

       前天晚上睡觉前萌生实现一个小软件的想法,界面准备采用类似Demon tools的NotifyIcon界面。今天游玩归来准备动手写的时候,在工具栏里面却发现没找到托盘控件,囧。既然没有,就自己实现下吧,参考了MSDN上给出的代码样板,于是写了如下一个,也算是为下一个小软件做下铺垫吧~

      运行界面如下所示:

                 

       图1                                             图2

 

       代码很少,如下所示:       


using  System;
using  System.Windows;
using  System.Windows.Forms;
using  System.Drawing;

namespace  Royen
{
    
public   partial   class  SysTray : Window
    {
        
private  NotifyIcon notifyIcon = null ;

        
public  SysTray()
        {
            InitializeComponent();

            InitialTray();
        }

        
private   void  InitialTray()
        {
            
// 隐藏主窗体
             this .Visibility  =  Visibility.Hidden;
                
            
// 设置托盘的各个属性
            notifyIcon  =   new  NotifyIcon();
            notifyIcon.BalloonTipText 
=   " systray runnning... " ;         
            notifyIcon.Text 
=   " systray " ;
            notifyIcon.Icon 
=   new  System.Drawing.Icon( " http://www.cnblogs.com/res/spring.ico " );
            notifyIcon.Visible 
=   true ;
            notifyIcon.ShowBalloonTip(
2000 );            
            notifyIcon.MouseClick 
+=   new  System.Windows.Forms.MouseEventHandler(notifyIcon_MouseClick);
            
            
// 设置菜单项
            MenuItem setting1  =   new  MenuItem( " setting1 " );
            MenuItem setting2 
=   new  MenuItem( " setting2 " );
            MenuItem setting 
=   new  MenuItem( " setting " new  MenuItem[]{setting1,setting2});

            
// 帮助选项
            MenuItem help  =   new  MenuItem( " help " );

            
// 关于选项
            MenuItem about  =   new  MenuItem( " about " );

            
// 退出菜单项
            MenuItem exit  =   new  MenuItem( " exit " );
            exit.Click 
+=   new  EventHandler(exit_Click);

            
// 关联托盘控件
            MenuItem[] childen  =   new  MenuItem[] {setting,help,about,exit};
            notifyIcon.ContextMenu 
=   new  ContextMenu(childen);

            
// 窗体状态改变时候触发
             this .StateChanged  +=   new  EventHandler(SysTray_StateChanged);
        }
      
        
///   <summary>
        
///  鼠标单击
        
///   </summary>
        
///   <param name="sender"></param>
        
///   <param name="e"></param>
         private   void  notifyIcon_MouseClick( object  sender, System.Windows.Forms.MouseEventArgs e)
        {
            
// 如果鼠标左键单击
             if  (e.Button  ==  MouseButtons.Left)
            {
                
if  ( this .Visibility  ==  Visibility.Visible)
                {
                    
this .Visibility  =  Visibility.Hidden;
                }
                
else
                {
                    
this .Visibility  =  Visibility.Visible;
                    
this .Activate();
                }
            }
        }

        
///   <summary>
        
///  窗体状态改变时候触发
        
///   </summary>
        
///   <param name="sender"></param>
        
///   <param name="e"></param>
         private   void  SysTray_StateChanged( object  sender, EventArgs e)
        {
            
if  ( this .WindowState  ==  WindowState.Minimized)
            {
                
this .Visibility  =  Visibility.Hidden;
            }
        }          


        
///   <summary>
        
///  退出选项
        
///   </summary>
        
///   <param name="sender"></param>
        
///   <param name="e"></param>
         private   void  exit_Click( object  sender, EventArgs e)
        {
            
if  (System.Windows.MessageBox.Show( " sure to exit? " ,
                                               
" application " ,
                                                MessageBoxButton.YesNo,
                                                MessageBoxImage.Question,
                                                MessageBoxResult.No) 
==  MessageBoxResult.Yes)
            {
                System.Windows.Application.Current.Shutdown();
            }
        }
    }
}

 

 

     工程源码下载:/Files/royenhome/Royen.rar 。真诚的希望和大家学习交流~

 

 

 

 

 

 

 

 

 

 

 


 

 

转载于:https://www.cnblogs.com/royenhome/archive/2010/02/02/1662243.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值