【发布时间】:2012-04-17 10:24:51
【问题描述】:
我有一个程序希望能够处理所有三种状态:
- 不显示在任务栏中,仅充当 Windows 声音、网络程序等小部件
- 显示在任务栏中 - 但不是最顶层。该窗口仍将显示通知区域图标,其行为仍应与 #1 相同,但也会在任务栏中显示该窗口。
- 显示在最顶部的任务栏中。窗口的行为应该与 #2 相同,但现在窗口将显示在最顶部。注意:它应该仍然能够被最小化,就像单击任务栏图标最小化程序一样。
这些是我的标准,我一直在努力让它们都很好地协同工作,但我似乎无法解决最后几个调整。 #1很好 - 我已经很容易地解决了这个问题。 #2 和 #3 会导致更多问题。
我的第一个问题是,Windows 如何处理用户单击任务栏图标以使其最小化/切换回正常状态?因为我更喜欢用 #2 和 #3 来模仿它。
对于#1,我目前只需将Window.Visibility 设置为Visibility.Hidden 即可隐藏窗口。要显示窗口,请拨打Show(),然后拨打Activate()。
就像我说的,对于 #2 和 #3,我想复制 Windows 在用户单击任务栏图标时所做的事情。我可以这样做吗?还是我必须找到另一种方法来做到这一点?
【问题讨论】:
-
我们说的是应用程序中的一个窗口还是多个不同的窗口?
-
@CodingBarfield 这只是一个窗口
-
您无法模仿 Windows 所做的事情,程序在将窗口推到用户面前的能力受到严格限制。规则在 SetForegroundWindow 的 MSDN 库文章中列出。
-
@HansPassant 真正让我困扰的是以一种有效的方式隐藏窗口。例如,我不能使用 Hide(),因为它会从任务栏中删除程序。我也不能使用可见性,因为它做同样的事情。
-
如果您想保持任务栏按钮可见,请最小化窗口。 WindowState 属性。