Как сохранить мое самое верхнее окно на вершине?

Я сначала объясню, почему мне нужен он, потому что я ожидаю, что первый ответ будет, "Почему Вам нужен он?". Я хочу обнаружить, когда курсор мыши находится на краю экрана, и я не хочу использовать рычаги. Следовательно, я создал САМОЕ ВЕРХНЕЕ невидимое окно один пиксель шириной.

Я использую 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. Я знаю, что подход "грубой силы" периодического обеспечения моего окна к главным работам, все же ужасен и мог иметь некоторый нежелательный вывод с окном уведомления, например. (Обеспечение моего окна к вершине скроет окно уведомления.)

Спасибо на Вашем времени и предложениях!

5
задан Misko Mare 17 June 2010 в 22:18
поделиться