程序可以使用通知图标来在通知区域(又称系统托盘)中放置正在发生的事情的视觉指示,默认情况下,通知区域位于任务栏的右端。
NotifyIcon 组件使这变得相对简单。首先将组件放置在窗体上。设置组件的Icon属性以确定它显示的图标。设置其Text属性以确定它在其工具提示中显示的内容。您还可以设置其ContextMenu属性以指定右键单击组件时组件应显示的 ContextMenuStrip 。
当您单击“Happy”单选按钮时,将执行以下代码。
首先,如果 Happy 单选按钮尚未被选中,则代码会检查它。为了避免重复代码,程序对单选按钮的Click事件和上下文菜单的 Happy 项的Click事件使用相同的事件处理程序。如果事件处理程序由上下文菜单执行,则第一行代码确保程序的 Happy 单选按钮被选中。
接下来,代码将窗体的Icon属性设置为 Happy 图标资源。最后设置NotifyIcon的Icon和Text属性。
管理“悲伤”按钮的代码的工作方式类似。
用户界面注意事项
在早期版本的 Windows 中,通知图标始终可见,因此它们为您提供了一种让用户了解应用程序状态的简便方法。不幸的是,Windows 的最新版本(例如 Windows 8)使此功能变得不那么有用。默认情况下,通知区域仅显示几个图标,其余图标隐藏在溢出区域中,只有当您单击通知区域旁边的小扩展箭头时,溢出区域才可见。
如果您愿意,您可以更改该行为。启动显示通知图标的程序。在程序运行时,右键单击任务栏并选择自定义。在工具栏选项卡上,单击自定义按钮。在通知区域图标对话框中,找到该应用程序,将其行为条目更改为“显示图标和通知”,然后单击确定。现在图标将出现在通知区域中。
这已经够难了,对于你交给其他人运行的程序来说,可能不值得付出努力。相反,你可以使用程序的图标在系统任务栏中提供通知。只需更改程序的图标,更改就会出现。不幸的是,这不允许你将 ContextMenu与任务栏图标关联,但至少它使通知更容易。
// Display the happy icon.
private void radHappy_Click(object sender, EventArgs e)
{
if (!radHappy.Checked) radHappy.Checked = true;
this.Icon = Properties.Resources.HappyIco;
NotifyIcon1.Icon = Properties.Resources.HappyIco;
NotifyIcon1.Text = "Happy";
}
Windows 8 还改变了系统托盘中图标的大小。包含 16×16 和 32×32 大小图像的图标曾经足够了。这些图标现在被缩放(至少对于某些 Windows 设置而言),并且可能看起来非常丑陋(如本例所示)。
您可以调用GetSystemMetrics(SM_CXSMICON)(或使用带参数LIM_SMALL的LoadIconMetric)来找出系统所需的尺寸。为了(相对)安全,您也可以只提供 20×20 和 24×24 像素版本。
不幸的是,微软不再在较便宜的 Visual Studio 版本(例如 Express 版本)中提供图标编辑器,因此您需要使用其他图标编辑器,例如 IcoFX、Greenfish 或 InkScape/Gimp。
最后,为了显示通知区域图标,Windows 8 似乎从图标中选择了 32×32 图像,并将其缩小到 16×16 像素(或它想要的任何大小),即使图标文件包含 16×16 版本!这意味着,如果您创建一个具有完美尺寸的漂亮图标文件,Windows 仍然会缩小错误的尺寸,您会得到一个难看的结果。
因此,为了获得最佳效果,请使用仅包含 16×16 像素图像(或 Windows 所需的任何尺寸)的图标文件。(您可能希望将其他具有更多图像尺寸的图标文件用于其他内容(例如表单),以便 Windows 可以在不同视图中正确显示它。)
结果示例: