【发布时间】:2012-01-20 13:22:19
【问题描述】:
我收到了一个来自高层的有趣请求。他们想要一个简单的应用程序,可以在用户的计算机上显示多个时区的时间。这本身就是微不足道的;一个带有计时器的简单窗口,它将获取当前 UTC 时间并将其转换为他们希望看到的任意数量的时区,以更新某些标签的文本。
这就是问题所在;为了满足周围的要求,窗口永远不会被桌面上的其他任何东西遮挡,也不会被遮挡。用户将运行其他必须始终完全可见的应用程序,同时该应用程序不能被这些窗口之一覆盖。
所以,我正在考虑通过以下两种方式之一来实现它:
作为一个始终在顶部的应用程序,但背景将完全透明,时间显示将是 50% 透明或类似的。将鼠标移到窗口上会“突出显示”时间显示,方法是移除其透明度和/或添加不透明的高对比度背景。 AFAIK 这个解决方案不能使用 Windows Aero,因为主要用户的操作系统是 Windows XP。
作为一个应用程序,它使用低级 Windows 消息以某种方式模仿 Windows 任务栏在其“始终位于顶部”模式下的行为;它将停靠在屏幕顶部,将始终显示在“正常”状态窗口的顶部,并且还会控制其他窗口的“最大化”行为,以便这些窗口在最大化时不会与它重叠。
我真的不知道从哪里开始实施其中任何一个,但我会大胆猜测,鉴于 WinXP 的限制,如果可能的话,第二个选项更容易。那么,我希望实现哪些行为来告诉 Windows 永远不要在我的表单顶部最大化?
【问题讨论】:
-
我已经有一段时间没有看过它们了,但我想知道 Yahoo Widgets 之类的东西是否可以完全满足您的要求,而无需编写任何东西。 widgets.yahoo.com
-
您需要 pinvoke SHAppBarMessage()。大量的谷歌点击,第一次点击:codeproject.com/KB/dotnet/AppBar.aspx
-
@dkackman:这是个好主意,但我认为高层不会在这些工作站上安装雅虎产品。有问题的 regs 是 UL regs,计算机基本上是由呼叫人员使用的,所以他们把工作站锁得很紧。
-
@HansPassant:这正是我所需要的。我会进行更多研究,看看这在我们的情况下是否可行,但基本概念完全符合我们的要求。
标签: .net user-interface gdi