系统托盘弹出Windows 7风格

时间:2010-06-01 15:39:56

标签: wpf windows-7 system-tray

我想要这样的事情:

Tray popup

此窗口不可调整大小,并将其自身对准与其相关的系统托盘图标。

我有这个:

Tray popup

哪个可以调整大小,它可以在任何地方进行调整。如果单击Win 7中的音量控件,它将始终直接弹出图标上方。这很理想。

我发现this reference我认为它试图解决同样的问题(虽然图像已经死了但无法判断),

但我正在使用WPF,我不知道如何从Window对象中获取它们引用的这些Form对象。这是我窗口的XAML声明:

<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
x:Class="WirelessControl.Window1"
x:Name="Window"
Title="Window1"
Width="260" Height="370" mc:Ignorable="d" WindowStyle="None"></Window>

我觉得根据Windows的常见情况,必须有一个相当简单的方法来实现这一点。

ResizeMode="NoResize"导致我的窗口边框消失,所以没有帮助。

谢谢大家,我希望我足够全面。

3 个答案:

答案 0 :(得分:5)

您可以使用Shell_NotifyIconGetRect来检索通知图标的位置。然后,您可以重新定位窗口以匹配该位置。这就是音量控制UI的作用。不幸的是它只适用于Win7。

如果您需要使用较旧的操作系统,可以在NIN_BALLOONSHOW消息时获取鼠标光标位置 - 这就是音量控制UI用来做的事情。

答案 1 :(得分:3)

我在这里写了一系列关于这样做的帖子(并制作了一个示例项目):http://blog.quppa.net/2011/01/03/windows-7-style-notification-area-applications-in-wpf-recap-sample/

主题包括删除窗口调整大小而不删除玻璃边框,找到通知图标的位置(使用Shell_NotifyIconGetRect的Windows 7和使用更hacky方法的早期版本),找到任务栏对接并找到正确的工作当存在多个屏幕(监视器)时的区域。虽然我没有真正写过它,但示例代码包括未启用DWM(读取:Aero)的系统的回退(即,以Windows 7通知区域应用程序的样式绘制自定义1像素边框)。

答案 2 :(得分:0)

我在post

中回答了与您的问题相同的问题

唯一的问题是调整大小的光标仍然可见。我认为你可以通过制作窗口的消息循环来隐藏它们。