【问题标题】:Two fullscreen windows on two different monitors两个不同显示器上的两个全屏窗口
【发布时间】:2014-05-30 18:47:49
【问题描述】:

对于我的一个项目,我想在两个不同的显示器上打开两个全屏窗口。我使用 ChangeDisplaySettingsEx() 让每台显示器切换到我需要的分辨率(目前,每台显示器都切换到 640x480)。然后我想在每台显示器上打开一个覆盖整个屏幕的 WS_POPUP 窗口。为了确保窗口保持在前面,我还设置了 WS_EX_TOPMOST 标志。

只要只涉及一个监视器,这一切都可以正常工作。一旦我尝试在另一台显示器上打开第二个全屏窗口,我在第一台显示器上的窗口当然会失去焦点并突然出现在其他看起来非常难看的窗口后面,因为我们现在处于 640x480 中。这种行为当然是合乎逻辑的,因为只能有一个最顶层的窗口,但是我应该如何在两个不同的显示器上使用两个全屏窗口呢?我需要强制两个窗口保持在前面并覆盖它们后面的所有其他窗口。

有没有一种干净的方法来实现这样的事情,或者如果不求助于 hacky not-so-sure-whether-it-will-work-in-newer-or-older-Windows-versions 方法,这根本不可能?

谢谢!

【问题讨论】:

  • 任意数量的窗口都可以具有WS_EX_TOPMOST 窗口样式。如果失去输入焦点,窗口也不会失去这种窗口样式。如果没有看到代码,很难判断你哪里出错了。
  • 如果您的程序失败并且没有恢复显示分辨率会怎样?这在任何应用程序中都是不可接受的。 (除了售货亭之类的。)只是说。
  • 它实际上是一个信息亭系统:)
  • @Andreas 继续,然后。 :)
  • @IInspectable:是的,MSDN 文档似乎证实了这一点。我想我得再调查一些……也许这真的是我的代码中的一个问题。

标签: c windows winapi


【解决方案1】:

它实际上是一个信息亭系统:)

这当然绝不应该是自助服务终端应用程序上的真正问题。您应该从不运行任何其他创建窗口的进程。锁定机器以防止这种情况发生是必不可少的。

这不是结束的地方。强制视频模式也没有意义。当然,在配置机器时也应该这样做。您的 ChangeDisplaySettingsEx() 调用不仅没有必要,而且有害。由于现在更换显示器可能需要软件更新。请记住,这并非不可能,显示器通常是信息亭中磨损最快的部分。

不要帮助太多。

【讨论】:

    【解决方案2】:

    有一种简洁的方法可以实现这一点,尤其是在信息亭系统上。让您的桌面跨越两台显示器,然后放置一个窗口,使其覆盖两台显示器 - 完整桌面,即从左显示器的左上角到右显示器的右下角(而不是常规最大化到单个显示器)仅当前监视器)。使用单个前景窗口,您应该不再有焦点问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-16
      • 1970-01-01
      • 1970-01-01
      • 2014-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-30
      相关资源
      最近更新 更多