C#托盘窗口显示
托盘显示许多软件都有这个功能,在C#中如何实现呢,下面的方法可以实现托盘显示,不过可能有些复杂。
首先,需要在工具栏拖入NotifyIcon,如图1的那个控件。
图一:
然后,设置NotifyIcon的属性,加图标什么的。
最后,最主要的,就是NotifyIcon点击事件,要实现点击托盘图标隐藏窗口,再点击显示窗口,还有右键托盘能显示菜单等。
下面着重介绍一下这一部分的实现。
一、点击托盘右键菜单
这个NotifyIcon本身就有这个属性,即NotifyIcon.ContextMenu,添加相应菜单即可。
详见托盘显示演示的 AddTrayMenuItem()方法。
二、隐藏至托盘和显示
该部分使用user32.dll中的函数,如下:
1、bool SetWindowPos( IntPtr hWnd, IntPtr hWndAfter, int x, int y, int cx, int cy, uint flags)
函数功能:
该函数改变一个子窗口,弹出式窗口式顶层窗口的尺寸,位置和Z序。 子窗口,弹出式窗口,及顶层窗口根据它们在屏幕上出现的顺序排序、顶层窗口设置的级别最高,并且被设置为Z序的第一个窗口。
2、IntPtr FindWindowEx(IntPtr hwndParent,IntPtr hwndChildAfter,string lpszClass,string lpszWindow)
函数功能:
该函数获得一个窗口的句柄,该窗口的类名和窗口名与给定的字符串相匹配。这个函数查找子窗口,从排在给定的子窗口后面的下一个子窗口开始。在查找时不区分大小写。
3、int GetWindowRect(IntPtr hwnd, ref RECT lpRect)
函数功能:
该函数返回指定窗口的边框矩形的尺寸。该尺寸以相对于屏幕坐标左上角的屏幕坐标给出。
4、DrawAnimatedRects( IntPtr hwnd, int ani, ref RECT from,ref RECT to)
函数功能:
在窗口缩放时产生动画效果
部分代码如下:
ChangeTrayStateManager类:
TrayStateMethods类,引用user32.dll方法。
主界面调用:
详见工程
托盘显示演示