Сначала я объясню, зачем мне это нужно, потому что я ожидаю, что первым ответом будет «Зачем вам это нужно?». Я хочу определить, когда курсор мыши находится на краю экрана, и я не хочу использовать хуки. Поэтому я создал невидимое окно TOPMOST шириной в один пиксель.
Я использую C ++ в Win XP, поэтому при создании окна (CreateWindowEx (WS_EX_TOPMOST | WS_EX_TRANSPARENT ...) все работает нормально.
К сожалению, если пользователь перемещает другое самое верхнее окно, например панель задач над моим окном, я не получаю движения мыши.
Я пытался решить эту проблему аналогично подходам, предложенным в:
Как сохранить окно MDI всегда сверху
Сначала я попытался проверить 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 (), «IME по умолчанию» остается наверху. Я не знаю, что такое «IME по умолчанию» и как определить, находится ли панель задач поверх моего окна.
Итак, мой вопрос: как определить, что мое верхнее окно больше не является верхним верхним окном и как сохранить его сверху?
P.S. Я знаю, что подход "грубой силы", состоящий в том, чтобы периодически выводить мое окно наверх, работает, но уродлив и может иметь некоторый нежелательный вывод, например, в окне уведомлений. (Если поднять окно вверх, окно уведомлений будет скрыто.)
Спасибо за ваше время и предложения!