2012-01-12 104 views
10

我一直在想,当你调用NotifyIcon类的ShowBalloonTip方法,你会得到一个气球提示是这样的:如何创建丰富的通知区域提示和丰富的气球

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



微软产品的一些应用程序,并能显示更多的比那些“简单”的气球提示。
下面是一些样本:

Windows Update Tip Fig2:Windows更新气球工具提示


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


USB Safely Remove
图四:硬件删除工具提示(计划:USB安全删除)



好好看看图2,图3和图4表明它们不是标准的气球提示!

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

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

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


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

+0

*我*好看并没有告诉我。你的外表有什么不同?是的,他们使用大型自定义图标。自从Windows XP SP2以来,它一直受到支持。使用['Shell_NotifyIcon'函数](http://msdn.microsoft.com/en-us/library/windows/desktop/bb762159.aspx)来创建它们。 – 2012-01-12 15:27:54

回答

5

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

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

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

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 < <形象的例子

创建一个表单,只要你喜欢,地区,控件等:) 和代码是这样的:

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

顺便说一句,他们都看起来有点相同,具有不同的图标大小, 和第一o ne可以适合右边,而所有其他的都对齐左边... 微小的阴影变化等等:) :)

+0

你真的不需要这么做,也不需要使用WPF。 Windows内置了对此的支持。 – 2012-01-12 15:29:30

+0

那么Windows API是有能力的......我没有找到一个强大的ENOGH,但更简单的方法。你有什么想法? – 2012-01-18 21:50:55