如何在通知区域中创建丰富的工具提示和丰富的气球

时间:2012-01-12 14:14:11

标签: .net windows winapi notification-area balloon-tip

我一直在想,无论何时调用ShowBalloonTip类的NotifyIcon方法,都会得到这样的气球工具提示:

Standard Baloon Tip
图1:标准气球工具提示



某些应用程序和Microsoft产品能够显示的不仅仅是那些“简单”的气球提示 以下是一些示例:

Windows Update Tip 图2:Windows Update气球工具提示


Driver Installation Tip http://i.msdn.microsoft.com/dynimg/IC295019.png
图3:硬件驱动程序安装气球工具提示


USB Safely Remove
图4:硬件删除工具提示(程序:USB安全删除)



仔细看看图2,3和4显示它们不是标准的气球工具提示!

Fig2 具有不同的形状,可能来自设置Region属性。它还有一个比标准ToolTipIcon大得多的自定义图标。

Fig3 使用标准形状(我认为),但它有一个自定义图标,不用说大于默认ToolTipIcon尺寸。

Fig4 使用标准ToolTipIcon,但它有不同的形状。


我的问题是如何创建在.NET的通知区域中看到的任何“丰富”气球工具提示?我可以处理WinAPI,也可以产生必要的输出。

2 个答案:

答案 0 :(得分:5)

您必须使用Win32函数Shell_NotifyIcon。您可以将NOTIFYICONDATA结构的 dwInfoFlags 成员设置为NIIF_USER,以便为气球工具提示使用自定义图标。

在Windows XP Service Pack 2及更高版本中,您可以使用 hIcon 成员指定自定义图标。

在Windows Vista及更高版本中,NOTIFYICONDATA结构包含附加成员 hBalloonIcon 。如果已将 cbSize 成员设置为扩展NOTIFYICONDATA结构的正确大小,则可以使用此成员指定自定义图标。

答案 1 :(得分:0)

检查出来:

http://www.codeproject.com/KB/WPF/WPF_TaskbarNotifier.aspx

www.codeproject.com/KB/WPF/wpf_notifyicon.aspx

其他选项是制作自己的通知表格气球, 然后你会有鲜花背景和粉红色边框的通知:) 顺便说一句:它也可以有一些功能。

如下例所示:

http://i.stack.imgur.com/QtA0Y.jpg <<图像示例

根据需要创建表单,Region,Controls,Etc :) 和代码类似:

void notifyIcon_MouseMove(object sender, MouseEventArgs e)
    {
        if (!this.Visible)
        {
            ShowPopup();
        }
    }

    Timer t = new Timer();
    private void ShowPopup()
    {
        Rectangle rect = Screen.GetWorkingArea(new Point(Screen.PrimaryScreen.Bounds.Right, Screen.PrimaryScreen.Bounds.Bottom));
        this.Top = rect.Bottom - this.Height;
        this.Left = rect.Right - this.Width;
        this.Visible = true;

        t.Interval = 4000;
        t.Tick += new EventHandler(t_Tick);
        t.Start();
    }

    void t_Tick(object sender, EventArgs e)
    {
        t.Stop();
        Visible = false;
    }

    private void Form1_Click(object sender, EventArgs e)
    {
        this.Visible = false;
    }

    private void Form1_FormClosing(object sender, FormClosingEventArgs e)
    {
        notifyIcon.Visible = false;
        notifyIcon.Dispose();
    }

BTW他们看起来都有点相同,图标大小不同, 并且第一个可以适合右边,而所有其他都与左边对齐... 小阴影变化等等:)