系统托盘弹出窗口 7 样式
Posted
技术标签:
【中文标题】系统托盘弹出窗口 7 样式【英文标题】:System Tray Popup Windows 7 Style 【发布时间】:2011-02-26 10:12:30 【问题描述】:我想要这样的东西:
(来源:cybernetnews.com)
此窗口不可调整大小,并在与其相关的系统托盘图标上方对齐。
我有这个:
它是可调整大小的,它可以随心所欲。如果您在 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"
导致我的窗口边框消失,所以这无济于事。
谢谢大家,我希望我足够全面。
【问题讨论】:
【参考方案1】:我在post 中回答了一个和你一样的问题
唯一的问题是调整大小的光标仍然可见。我认为您可以通过操纵窗口的消息循环来隐藏它们。
【讨论】:
【参考方案2】:您可以使用Shell_NotifyIconGetRect 检索通知图标的位置。然后,您可以重新定位窗口以匹配该位置。这就是音量控制 UI 的作用。不幸的是,它只适用于 Win7。
如果您需要在较旧的操作系统上工作,您可以在 NIN_BALLOONSHOW 消息时获取鼠标光标位置 - 这就是音量控制 UI 过去所做的。
【讨论】:
我也可以在单击图标时获得鼠标光标,并且可以使用每 24 像素的模数来近似图标所在的级别。然而,这似乎是一种重新实现在 Windows Vista 和 7 中如此常见的对话框的解决方法。 这正是在 Windows 7 中添加 Shell_NotifyIconGetRect API 的原因 - 因为这是一项常见任务,他们将其自动化。【参考方案3】:我在这里写了一系列关于这样做的帖子(并制作了一个示例项目):http://blog.quppa.net/2011/01/03/windows-7-style-notification-area-applications-in-wpf-recap-sample/
涵盖的主题包括在不移除玻璃边框的情况下移除窗口调整大小、查找通知图标的位置(在 Windows 7 中使用 Shell_NotifyIconGetRect 以及在早期版本中使用更老套的方法)、查找任务栏停靠对齐并找到正确的工作存在多个屏幕(监视器)时的区域。虽然我并没有真正写过它,但示例代码包括未启用 DWM(读取:Aero)的系统的回退(即,以 Windows 7 通知区域应用程序的样式绘制自定义 1 像素边框)。
【讨论】:
以上是关于系统托盘弹出窗口 7 样式的主要内容,如果未能解决你的问题,请参考以下文章