如何使用C#和.NET框架创建Windows 7通知区域飞出窗口?

11

我正在尝试使用Windows 7通知区域Flyouts创建应用程序,类似于Windows 7内置的音量、电源和无线图标。

然而,我并没有找到任何关于.NET API实现这一功能的信息。是否有内置方法可以创建通知区域Flyouts?如果没有,是否有其他方法可以实现此功能?


这并没有直接回答你的问题,因为它不是关于Windows 7的东西,但是你看过Growl吗?它非常方便,并且有可用的.Net绑定!然而,它的缺点是需要安装另一种软件。 - user47589
相关内容:https://dev59.com/U2445IYBdhLWcg3wAFcC - Zack Peterson
2个回答

9

它们并没有什么特别的,只是一个没有标题栏的普通窗口(表单)。在winforms中,ControlBox=false和Text=""。你需要做的唯一事情就是设置它的位置属性,以便它出现在通知区域上方。实现Deactivate事件来关闭它。


这些设置对于我想要的样式效果很好,但是关于定位呢?我一直在寻找方法来做到这一点,但迄今为止没有找到特别优雅的解决方案。你有关于如何进行定位的建议吗? - nhinkle
你可以从Screen.PrimaryScreen.WorkingArea和.Bounds中推断出来。它们之间的区别在于任务栏的位置。虽然不是100%可靠,但使用ABM_GETTASKBARPOS调用ShAppBarMessage函数是可行的。这里并不考虑优雅。 - Hans Passant
有没有针对PInvoke路线的教程或其他资源,或者这可能不值得我花时间去学习? - nhinkle
它并不是很好,.NET与shell的集成非常差。它已经存在了太长时间,并且难以使用。使用Screen类就可以了。如果有人在屏幕上有另一个任务栏,这种情况极为罕见,他们会明白为什么弹出窗口显示在它所在的位置。 - Hans Passant
好的。我会尝试使用这种方法,并让您知道进展如何。 - nhinkle

4

我在这里回答了一个类似的问题:

在Winforms(C#)中创建系统托盘样式的框

按照上述提到的配置一些属性将使您获得一个看起来像这样的窗口,您可以用自己的控件填充它。从这里开始,您需要一个小面板停靠在窗口底部,几个链接放在其中,以及您需要的任何其他控件。

example border window


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接