2010-06-17 3 views
5

Сначала я объясню, зачем мне это нужно, потому что я ожидаю, что первый ответ будет «Зачем вам это нужно?». Я хочу обнаружить, когда курсор мыши находится на краю экрана, и я не хочу использовать крючки. Следовательно, я создал невидимое окно TOPMOST шириной в пиксель.Как сохранить верхнее окно сверху?

Я использую C++ на Win XP, поэтому при создании окна (CreateWindowEx (WS_EX_TOPMOST |. WS_EX_TRANSPARENT ...) все работает отлично

К сожалению, если пользователь перемещает другое верхнее окно, например, панель задач над моим окном, я не получаю движения мыши

Я попытался решить эту проблему по аналогии с подходами, предложенными в:. How To Keep an MDI Window Always on Top

Я пытался проверить Z-порядка моего верхнего окна в WM_WINDOWPOSCHANGED сначала

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); 

и я всегда буду получать, что окно «По умолчанию IME» находится поверх моего окна. Даже если попытаться вывести мое окно вверху с помощью SetWindowPos() или BringWindowToTop(), «Default IME» останется на вершине. Я не знаю, что такое «Default IME» и как определить, находится ли панель задач поверх моего окна.

Итак, мой вопрос: как определить, что мое самое верхнее окно больше не является верхним верхним окном и как его удерживать сверху?

P.S. Я знаю, что подход «грубой силы», периодически приносящий мое окно в верхние работы, все же уродлив и может иметь некоторые нежелательные выводы с окном уведомления, например. (Приведение моего окна в верхнюю часть скроет окно уведомлений.)

Благодарим вас за ваше время и предложения!

+0

Возможный дубликат [Как сделать окно всегда оставаться на вершине .Net?] (Http://stackoverflow.com/questions/683330/how-to-make-a-window-always-stay-on- top-in-net) –

ответ

8

TopMost, всегда сложная вещь. Невозможно переопределить другое окно, которое определяет себя как TopMost.

Raymond Chen has a good article on this.

Также дубликат this.

+3

Статья Чэнь не хороша. Я как пользователь хочу, чтобы только одна программа делала это. Я никогда не буду запускать 2 таких программы за один раз. Таким образом, даже если Вселенная рушится, когда две программы пытаются быть самыми лучшими одновременно, мне все равно. – noober

Смежные вопросы