0

我正在玩 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不是那么出色,所以放轻松..

谢谢!达摩

4

2 回答 2

2

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

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

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

于 2009-12-20T14:44:59.663 回答
1

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

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

来自:http: //blogs.msdn.com/oldnewthing/archive/2005/06/07/426294.aspx :)

于 2009-12-20T13:30:07.787 回答