【问题标题】:TOPMOST window in full-screen全屏显示TOPOST窗口
【发布时间】:2009-12-20 13:22:10
【问题描述】:

我正在使用 Java 中的 JFrame。我希望它成为最顶层的窗口,即始终位于顶层。 setAlwaysOnTop() 工作正常,但是一旦我以全屏模式启动电影或游戏窗口,它就无法保持在顶部。

我玩过 JNI 和句柄。我的 JNI 的 C 代码正在使用 SetWindowPos() ,这似乎工作正常,直到我启动一个全屏应用程序。这是一个示例:

JNIEXPORT void JNICALL Java_Frame1_setWindowAlwaysOnTop
(JNIEnv *env, jclass obj, jint hwnd, jboolean flag)
{
  if (flag)
    SetWindowPos((HWND) hwnd,HWND_TOPMOST,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);
  else
    SetWindowPos((HWND) hwnd,HWND_NOTOPMOST,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);
  return;
}

我已经在谷歌上搜索了一段时间,我所确定的只是全屏以独占模式运行并且“暂停窗口系统以便可以直接在屏幕上进行绘图 ”。

任何人都可以提出解决方法吗?顺便提一句。我的 C 不是那么出色,所以放轻松..

谢谢! 达摩

【问题讨论】:

    标签: java c fullscreen handle topmost


    【解决方案1】:

    “Topmost”仅在窗口环境中才有意义。

    全屏游戏和电影通常会将模式切换为全屏独占模式。这意味着单个应用程序几乎可以完全控制视频 - 它可以更改分辨率、成为唯一显示的应用程序等。

    当另一个应用程序具有全屏独占模式时,即使在“最顶层”的窗口应用程序也不会显示,因为不再有可用的窗口概念。

    【讨论】:

    【解决方案2】:

    “如何创建一个不会被任何其他窗口甚至其他最顶层窗口覆盖的窗口?”

    想象一下这是否可能,并想象一下两个程序是否可以做到这一点。程序 A 创建了一个“超级顶层”窗口,程序 B 也是如此。现在用户拖动两个窗口,使它们重叠。发生什么了?你给自己创造了一个逻辑上的不可能性。这两个窗口中的一个必须在另一个之上,这与想象中的“超级顶层”功能相矛盾

    发件人:http://blogs.msdn.com/oldnewthing/archive/2005/06/07/426294.aspx :)

    【讨论】:

    • 一个很好的观点!但我所追求的不是“超级最顶层”功能,而是一次性覆盖最顶层。例如,我的游戏窗口以全屏方式启动。我希望我的代码检测事件并覆盖全屏窗口的最顶部。但是如果然后游戏窗口再次刷新并成为最顶层 - 那没关系。我的意思是我不确定是否有办法做到这一点。我当然不希望 2 个窗口成为超级窗口,而只是为了能够暂时覆盖 f 屏幕。顺便说一句,它与您在 1 个窗口然后在其他窗口上执行 SetWindowPos() 时不一样吗?
    猜你喜欢
    • 1970-01-01
    • 2011-07-31
    • 1970-01-01
    • 1970-01-01
    • 2021-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多