2010-06-17 15 views
5

Najpierw wyjaśnię, dlaczego go potrzebuję, ponieważ przewiduję, że pierwsza odpowiedź będzie "Dlaczego tego potrzebujesz?". Chcę wykryć, kiedy kursor myszy znajduje się na krawędzi ekranu i nie chcę używać haków. Stworzyłem więc jedno niewidoczne okno TOPMOST o szerokości jednego piksela.Jak utrzymać moje najwyższe okno na wierzchu?

Używam C++ na Win XP, więc gdy okno jest tworzony (CreateWindowEx (WS_EX_TOPMOST |. WS_EX_TRANSPARENT ...) wszystko działa poprawnie

Niestety, gdy użytkownik porusza inny najwyższego okna, na przykład pasek zadań nad moim oknem, ja nie rozumiem ruchy myszy

starałem się rozwiązać ten problem podobnie do rozwiązań zaproponowanych w. How To Keep an MDI Window Always on Top

starałem się sprawdzić na z-order mojego najwyższego okna w WM_WINDOWPOSCHANGED najpierw

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

jeszcze pWP-> hwnd wskazuje na moje okno i pWP-> hwndInsertPo wykonaniu jest 0, co powinno oznaczać, że moje okno znajduje się na górze Z, mimo że jest pokryte paskiem zadań. Następnie próbowałem:

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

i zawsze będę mieć pewność, że okno "Domyślne IME" znajduje się na górze mojego okna. Nawet jeśli sprowadzisz moje okno na szczyt za pomocą SetWindowPos() lub BringWindowToTop(), "Domyślny IME" pozostaje na górze. Nie wiem, co to jest "Domyślny IME" i jak wykryć, czy pasek zadań znajduje się nad moim oknem.

Moje pytanie brzmi: jak wykryć, że moje najwyższe okno nie jest już najwyższym oknem i jak je zachować?

P.S. Wiem, że podejście "brutalnej siły" polegające na okresowym wprowadzaniu mojego okna na szczyt działa, ale jest brzydkie i może mieć niepożądane wnioskowanie na przykład w oknie powiadomień. (Przesunięcie okna do góry spowoduje ukrycie okna powiadomienia.)

Dziękuję za poświęcony czas i sugestie!

+0

możliwy duplikat [Jak sprawić, aby okno zawsze pozostało na wierzchu w .Net?] (Http://stackoverflow.com/questions/683330/how-to-make-a-window-always-stay-on- top-in-net) –

Odpowiedz

8

TopMost, zawsze jest podchwytliwa. Nie ma możliwości zastąpienia innego okna, które określa się jako TopMost.

Raymond Chen has a good article on this.

również duplikat this.

+3

Artykuł Chena nie jest dobry. Ja jako użytkownik chcę tylko jeden program robiący to. Nigdy nie uruchomię 2 takich programów jednocześnie. Nawet jeśli Wszechświat zapadnie się, gdy dwa programy próbują być jednocześnie najwyżej położone, to mnie to nie obchodzi. – noober

Powiązane problemy