【问题标题】:How to create rich tooltips and rich balloons in notification area如何在通知区域创建丰富的工具提示和丰富的气球
【发布时间】:2012-01-12 14:14:11
【问题描述】:

我一直在想,每当你调用NotifyIcon 类的ShowBalloonTip 方法时,你会得到一个像这样的气球工具提示:


图 1:标准气球工具提示



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

图 2:Windows 更新气球工具提示



(来源:microsoft.com

图 3:硬件驱动程序安装气球工具提示



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



仔细查看图 2、3 和 4 会发现它们不是标准的气球工具提示!

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

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

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


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

【问题讨论】:

  • 我的好看并不能说明这一点。你的长相有什么不同?是的,他们使用大型自定义图标。从 Windows XP SP2 开始就支持这一点。使用 Shell_NotifyIcon function 创建它们。

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


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    看看这个:

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

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

    其他选项是制作您自己的通知表单气球, 然后您将收到带有花朵背景和粉红色边框的通知 :) 顺便说一句:它也可以有一些功能。

    如本例所示:

    http://i.stack.imgur.com/QtA0Y.jpg

    根据需要创建表单、区域、控件等 :) 并编写如下代码:

    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();
        }
    

    顺便说一句,它们看起来都差不多,只是图标大小不同, 并且第一个可以适合右侧,而所有其他都可以对齐到左侧... 轻微的阴影变化等:)

    【讨论】:

    • 你真的不需要做所有这些,也不需要使用 WPF。 Windows 内置了对此的支持。
    • 好吧,windows API 是有能力的……我没有找到一个强大但更简单的方法。你想到了什么?
    猜你喜欢
    • 2011-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多