2010-06-17 36 views
5

我會先解釋我爲什麼需要它,因爲我預計第一個迴應將是「你爲什麼需要它?」。我想檢測鼠標光標何時位於屏幕的邊緣,而我不想使用鉤子。因此,我創建了一個像素寬的TOPMOST不可見窗口。如何保持我最上面的窗口?

我使用C++在Win XP,所以創建窗口時(CreateWindowEx(WS_EX_TOPMOST |。WS_EX_TRANSPARENT ...)一切工作正常

不幸的是,如果用戶移動另一個頂層窗口,例如任務欄在我的窗口,我沒有得到鼠標移動

我試圖解決同樣這在建議方案: How To Keep an MDI Window Always on Top

我想檢查我的WM_WINDOWPOSCHANGED最頂層窗口的Z順序先用

case WM_WINDOWPOSCHANGED : 
    WINDOWPOS* pWP = (WINDOWPOS*)lParam; 

尚pWP-> hwnd指向我的窗口和pWP-> hwndInsertAfter爲0,這應該意味着我的窗口是在Z的頂部,即使它被覆蓋任務欄。然後,我嘗試:

case WM_WINDOWPOSCHANGED : 
    HWND topWndHndl = GetNextWindow(myHandle, GW_HWNDPREV) 
    GetWindowText(topWndHndl, pszMem, cTxtLen + 1); 

我總是會得到「Default IME」窗口位於窗口頂部。即使嘗試使用SetWindowPos()或BringWindowToTop()將窗口置頂,「Default IME」仍保留在頂部。我不知道什麼是「默認輸入法」以及如何檢測任務欄是否在我的窗口之上。

所以我的問題是:如何檢測我的最頂層的窗口不再是頂層的頂層窗口,以及如何保持頂層?

P.S.我知道週期性地將我的窗口帶到頂層作品的「強力」方法,但卻很難看,例如可能會有一些不必要的推論。 (將我的窗口置於頂部將隱藏通知窗口。)

謝謝你的時間和建議!

+0

可能的重複[如何使一個窗口始終停留在頂部.Net?](http://stackoverflow.com/questions/683330/how-to-make-a-window-always-stay-on- top-in-net) – 2010-06-17 22:22:56

回答

8

TopMost,總是一件棘手的事情。沒有辦法覆蓋另一個窗口,指定自己爲TopMost。

Raymond Chen has a good article on this.

另外的this重複。

+3

陳的文章不太好。我作爲用戶只需要一個程序。我永遠不會同時啓動2個這樣的程序。所以,即使宇宙在兩個程序同時試圖成爲topmostest的時候崩潰,我也不在乎。 – noober 2014-11-25 07:59:14

相關問題