按要求要做一个隐藏在后台通知栏的功能,而目前软件开发所用的wpf不含有NotifyIcon这一控件,研究了一下如何调用winform,效果也算是达到了
头文件
using WinForms = System.Windows.Forms;
预定义几个按钮和通知栏图标
private WinForms.NotifyIcon _notifyIcon;
private WinForms.ContextMenu _contextMenu;
private WinForms.MenuItem _openWindow;
private WinForms.MenuItem _closeApp;
private System.ComponentModel.IContainer _iContainer;
初始化函数
public void NotifyInit()//通知栏显示图标的初始化
{
_contextMenu = new WinForms.ContextMenu();
_openWindow = new WinForms.MenuItem() { Text = "Show" };
_closeApp = new WinForms.MenuItem() { Text = "Exit" };
_iContainer = new System.ComponentModel.Container();
WinForms.MenuItem[] menuItems = new WinForms.MenuItem[] { _openWindow, _closeApp };
_contextMenu.MenuItems.AddRange(menuItems);
_openWindow.Click += new System.EventHandler(openWindow_Click);
_closeApp.Click += new System.EventHandler(exitApp_Click);
_notifyIcon = new WinForms.NotifyIcon(_iContainer);
_notifyIcon.Icon = new System.Drawing.Icon(@"Z:\CUserPicture\logo\bitbug_favicon.ico");
_notifyIcon.Text = "Todolist";
_notifyIcon.Visible = true;
_notifyIcon.ContextMenu = _contextMenu;
}
通知栏图标相关:
上面的
_notifyIcon.Icon = new System.Drawing.Icon(@"Z:\logo\bitbug_favicon.ico");
这一句中是我自己的图标的绝对路径,图标必须要有才会显示
_notifyIcon.Text
这个是设置显示在通知栏中的时候,程序的名称
右键按钮相关
:
_openWindow.Click += new System.EventHandler(openWindow_Click);
_closeApp.Click += new System.EventHandler(exitApp_Click);
openWindow_Click,
exitApp_Click
这两个事件是已经定义的函数
比如我一开始是隐藏dialog的,那么这里的openWindw就是
private void openWindow_Click(object sender,EventArgs e)
{
this.Show();
}
这样在点击Show时候就会显示程序窗口
退出程序这里比较直截了当
private void exitApp_Click(object sender,EventArgs e)
{
Environment.Exit(0);
}
防止点击X导致程序关闭,需要重载关闭按钮
protected override void OnClosing(CancelEventArgs e)
{
Hide();
e.Cancel = true;
}
最后效果:
关于其他:
这位开发的库也可以一用,但我在折腾了一会觉得一些地方似乎是对不上的,虽然近期还在做库更新但是教程没有更新,要更好地使用还需要折腾一下
http://www.hardcodet.net/wpf-notifyicon