我正在使用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;
}
我一直在谷歌搜索已经有一段时间了,我建立的只是全屏运行在独占模式下“暂停窗口系统,以便可以直接在屏幕上绘图 ”
有人可以建议一个解决方法吗? BTW。我的C不是那么精彩,所以放轻松..
谢谢! 达莫
答案 0 :(得分:1)
“我如何创建一个从未被任何其他窗口覆盖的窗口,甚至是其他最顶层的窗口?”
想象一下,如果这是可能的,并想象两个程序是否做到了这一点。程序A创建一个“超级最顶层”的窗口,程序B也是如此。现在用户拖动两个窗口使它们重叠。怎么了?你创造了一个逻辑上的不可能性。这两个窗口中的一个必须高于另一个窗口,与想象中的“超最顶层”特征相矛盾
来自:http://blogs.msdn.com/oldnewthing/archive/2005/06/07/426294.aspx:)
答案 1 :(得分:1)
“最顶层”仅在窗口环境中才有意义。
全屏游戏和电影通常会将模式切换为全屏独占模式。这意味着单个应用程序几乎可以完全控制视频 - 它可以改变分辨率,是唯一显示的应用程序等。
当另一个应用程序具有全屏独占模式时,即使在“最顶层”的窗口应用程序也不会显示,因为没有可用的窗口概念。