[win] Можно ли узнать, куда ушёл фокус с окна?/closed
Для WM_ACTIVATE сначала приходит сообщение тому окну, где раньше был фокус, а только потом - тому, которое получает фокус, так что при первом сообщении ты еще не знаешь, кому уходит фокус.
от в том то и проблема, что надо знать.
user32.GetFocus. В принципе то, что нужно (неудобно правда хендл окна получать, а не ссылку на объект, но то фигня но есть небольшое затруднение - при смене фокуса с MDI чайлда на главную форму возвращается хэнлд чайлда, а не главного окна (если фокус уходит на соседний MDI чайлд, то всё ок). Как бороться с этим нюансом?
нашёл функцию Но я настоятельно не рекомендую писать логику, которая основана на анализе клавиатурного фокуса. Хоть и бывают ситуации, когда это нужно; но они в основном связаны с реализацией своего собственного элемента управления и работают в его рамках. Анализ передачи фокуса между формами - это извращение.
а GetActiveWindow вообще всё время возвращает главную миди.
Но я настоятельно не рекомендую писать логику, которая основана на анализе клавиатурного фокусанадо поправить поведение старого девэкспресовского грида (вер. 3.1)
Я не понимаю, как можно выделить главную MDI форму, и что это вообще значит. Ясное дело, что если есть активное дочернее MDI окно, то оно будет возвращаться, потому что оно активное и получило фокус. Чтобы найти форму ферхнего уровня, надо воспользоваться Parent до упора.
на главной mdi форме могут быть контролы, которые могут получать фокус. (главное меню вроде контролом не является, но его открытие тоже должно отслеживаться)
Оставить комментарий
kill-still
в окно приходит WM_ACTIVATEAPP. в зависимости от того, куда ушел фокус, необходимо произвести различные действия.проблема в том, что во время этого события форма, куда ушел фокус, ещё не получила WM_ACTIVATEAPP (ну или не обработала соответственно узнать, что под фокусом, таким образом невозможно. Есть ли ещё пути (ну, кроме как очередь сообщений прочитать)?