2009-12-20 177 views
0

我正在玩Java中的JFrame。我希望它成爲最頂層的窗口,即始終位於頂端。 setAlwaysOnTop()工作正常,但只要我以全屏模式啓動電影或遊戲窗口,它就無法保持最佳狀態。全屏幕TOPMOST窗口

我玩過JNI和句柄。我的JNI代碼使用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; 
} 

我一直在使用Google有一段時間了,所有我確定的是,全屏幕獨佔模式運行,「暫停窗口系統,使繪圖可以直接完成屏幕「。

任何人都可以提出一種解決方法嗎? BTW。我的C並不那麼輝煌,所以去吧。

謝謝! Damo

回答

1

「層次最高的」纔有意義,在窗口環境。

全屏遊戲和電影通常將模式切換爲全屏獨佔模式。這意味着單一應用程序幾乎可以完全控制視頻 - 它可以更改分辨率,是唯一顯示的應用程序等。

即使在「最頂層」,窗口應用程序也不會顯示應用程序具有全屏獨佔模式,因爲沒有可用的窗口概念了。

+0

恐怕你是對的。 http://java.sun.com/docs/books/tutorial/extra/fullscreen/exclusivemode.html 謝謝! – 2009-12-20 14:51:27

1

「如何創建一個永遠不會被其他窗口覆蓋的窗口,甚至沒有其他最頂層的窗口?

想象一下,如果這是可能的,並想象如果兩個程序這樣做。程序A創建一個「超級最高」的窗口,程序B也是如此。現在用戶拖動這兩個窗口,使它們重疊。怎麼了?你創造了自己的邏輯不可能性。其中一個兩個窗口必須高於其他矛盾虛「超層次最高的」功能

來源:http://blogs.msdn.com/oldnewthing/archive/2005/06/07/426294.aspx :)

+0

非常好的一點!但是我所追求的並不是「超級頂級」功能,而是頂級的一次性覆蓋。例如我的遊戲窗口從全屏開始。我想讓我的代碼檢測事件並覆蓋全屏窗口的最頂層。但是如果遊戲窗口再次刷新併成爲最高級 - 那沒問題。 我的意思是我不確定有辦法做到這一點。我當然不希望2個窗口成爲超級窗口,而只是爲了能夠暫時覆蓋f屏幕。順便說一句,當你在1窗口執行SetWindowPos(),然後在其他? – 2009-12-20 14:06:55