Здравствуйте, Antonovich Aleksei, Вы писали:
AA>После отображения контекстного меню методом TrackPopupMenu необходимо закрывать это меню по нажатию VK_LEFT. Однако ни в ProcessMessage, ни в PreProcessMessage, при видимом меню, сообщения от клавиатуры попросту не приходят. Если меню не активно — всё нормально все сообщения доходят. AA>Пробовал смотреть Spy++: он показывает, что message уходит вначале parent Control, затем какому неизвестному Handle (подозреваю, что меню), но мне ничего не приходит. AA>Программа написанна на C#. AA>Как это можно вылечить? Или же винда каким-то особенным способом обрабатывает меню и не получиться влезть в этот процесс?
Вот есть твой UI-ный поток. В "обычном" режиме он крутится в цикле сообщений, который вызывает всякие PreProcessMessage и пр. Но вот приходит команда отобразить контекстное меню, и поток приходит в обработчик запуска контекстного меню. В обработчике происходит вызов TrackPopupMenu, и поток "уходит" в эту функцию, и не выйдет из нее, пока не закроется меню. Поток крутится в цикле внутри этой функции TrackPopupMenu, который, ессно, не знает о каких-то там PreProcessMessage и пр. и не вызывает их.
Тебе надо повесить хук на свой поток. Только так ты будешь ловить ВСЕ сообщения.