我想要这样的事情:
此窗口不可调整大小,并将其自身对准与其相关的系统托盘图标。
我有这个:
哪个可以调整大小,它可以在任何地方进行调整。如果单击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"
导致我的窗口边框消失,所以没有帮助。
谢谢大家,我希望我足够全面。
答案 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
中回答了与您的问题相同的问题唯一的问题是调整大小的光标仍然可见。我认为你可以通过制作窗口的消息循环来隐藏它们。