Сначала я объясню, зачем мне это нужно, потому что я ожидаю, что первый ответ будет «Зачем вам это нужно?». Я хочу обнаружить, когда курсор мыши находится на краю экрана, и я не хочу использовать крючки. Следовательно, я создал невидимое окно 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. Я знаю, что подход «грубой силы», периодически приносящий мое окно в верхние работы, все же уродлив и может иметь некоторые нежелательные выводы с окном уведомления, например. (Приведение моего окна в верхнюю часть скроет окно уведомлений.)
Благодарим вас за ваше время и предложения!
Возможный дубликат [Как сделать окно всегда оставаться на вершине .Net?] (Http://stackoverflow.com/questions/683330/how-to-make-a-window-always-stay-on- top-in-net) –