Re: WM_KEYDOWN + context menu
От: rus blood Россия  
Дата: 01.06.04 16:31
Оценка:
Здравствуйте, Antonovich Aleksei, Вы писали:

AA>После отображения контекстного меню методом TrackPopupMenu необходимо закрывать это меню по нажатию VK_LEFT. Однако ни в ProcessMessage, ни в PreProcessMessage, при видимом меню, сообщения от клавиатуры попросту не приходят. Если меню не активно — всё нормально все сообщения доходят.

AA>Пробовал смотреть Spy++: он показывает, что message уходит вначале parent Control, затем какому неизвестному Handle (подозреваю, что меню), но мне ничего не приходит.
AA>Программа написанна на C#.
AA>Как это можно вылечить? Или же винда каким-то особенным способом обрабатывает меню и не получиться влезть в этот процесс?

Вот есть твой UI-ный поток. В "обычном" режиме он крутится в цикле сообщений, который вызывает всякие PreProcessMessage и пр. Но вот приходит команда отобразить контекстное меню, и поток приходит в обработчик запуска контекстного меню. В обработчике происходит вызов TrackPopupMenu, и поток "уходит" в эту функцию, и не выйдет из нее, пока не закроется меню. Поток крутится в цикле внутри этой функции TrackPopupMenu, который, ессно, не знает о каких-то там PreProcessMessage и пр. и не вызывает их.

Тебе надо повесить хук на свой поток. Только так ты будешь ловить ВСЕ сообщения.
Имею скафандр — готов путешествовать!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.