【问题标题】:How to un-minimise a window to the exact previous state (restored or maximised)?如何将窗口最小化到确切的先前状态(恢复或最大化)?
【发布时间】:2009-08-31 09:28:08
【问题描述】:

在 Windows 中,我有一个最小化的窗口,即前景窗口 (GetForegroundWindow)。我现在想取消最小化窗口,使其再次可见。如何将窗口恢复到以前的状态?即,如果窗口在最小化之前被“恢复”了,它应该被恢复,如果它在被最小化之前被最大化,它应该再次被最大化,尤其是不恢复什么的。

看来我只能从{minimised, restore, maximized}中判断窗口的当前状态,但理论上来说,minimized和maximized应该是可以一起设置的flags。

Explorer 任务栏如何知道用户点击窗口时在什么状态下显示窗口?

【问题讨论】:

  • 你在这里写程序吗?如果是,您使用的是哪种语言?
  • 抱歉,我正在编写一个 C# 应用程序,但它已经包含对 Win API 的 P/Invoke 调用,所以我可以使用托管和 WinAPI 解决方案。我也熟悉 C,所以我也可以使用它。

标签: windows


【解决方案1】:

如果你使用类似 C 的东西,你可以看看 ShowWindow 函数:

ShowWindow(hWnd, SW_RESTORE)

SW_RESTORE
激活并显示 窗户。如果窗口最小化或 最大化,系统将其还原为 它的原始大小和位置。一个 应用程序应指定此标志 恢复最小化窗口时。

【讨论】:

  • "如果窗口被 (...) 最大化,系统会将其恢复到原来的大小和位置。"这正是我不想要的。如果窗口被最小化并且之前被最大化,它应该被再次最大化,而不是恢复。
  • 这很奇怪——我试过了,效果很好。如果窗口被最小化并且之前被最大化,它将再次被最大化。我只是不知道错误在哪里 - 在实现或文档中:)
  • 是的。该错误在文档中。它确实按预期工作(没有记录)。正常(微软称之为“恢复”)窗口,然后最小化,再次恢复;最大化窗口,然后最小化,再次最大化。美好的。 :-)
【解决方案2】:

不了解技术(例如我不知道您使用的语言),程序需要存储当前正常大小、当前状态和先前状态。

然后从最小化恢复时可以检查之前的状态和大小。

在 WPF 中,当前大小和状态存储在主窗口的 TopLeftHeightWidthWindowState 属性中。位置和大小的副本保存在 RestoreBounds 结构中,基类在从 Maximized 恢复窗口时使用它(因此您不必这样做)。

【讨论】:

  • 所以你的意思是我必须记住窗口在最小化之前的 WindowState 是什么?如果我知道这一点,我可以很容易地回到正确的先前状态,真的。我希望操作系统能为我做到这一点......
  • @LonelyPixel - 不,该应用会为您记住它。我指的是 WPF 的各种结构。
猜你喜欢
  • 2011-04-18
  • 2011-05-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多