Я сначала объясню, почему мне нужен он, потому что я ожидаю, что первый ответ будет, "Почему Вам нужен он?". Я хочу обнаружить, когда курсор мыши находится на краю экрана, и я не хочу использовать рычаги. Следовательно, я создал САМОЕ ВЕРХНЕЕ невидимое окно один пиксель шириной.
Я использую C++ на Победе 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);
и я буду всегда получать это, окно "Default IME" сверху моего окна. Даже если попытка принести мое окно к вершине с SetWindowPos () или BringWindowToTop (), "IME По умолчанию" остается на вершине. Я не знаю то, что является "IME По умолчанию" и как обнаружить, если панель задач сверху моего окна.
Таким образом, мой вопрос: Как обнаружить, что мое самое верхнее окно больше не является главным самым верхним окном и как сохранить его на вершине?
P.S. Я знаю, что подход "грубой силы" периодического обеспечения моего окна к главным работам, все же ужасен и мог иметь некоторый нежелательный вывод с окном уведомления, например. (Обеспечение моего окна к вершине скроет окно уведомления.)
Спасибо на Вашем времени и предложениях!
TopMost - это всегда непросто. Невозможно переопределить другое окно, которое указывает себя как TopMost.
У Раймонда Чена есть хорошая статья по этому поводу.
Также дубликат этого .