Как получить события перемещения мыши при отображении ContextMenuStrip? - PullRequest
2 голосов
/ 07 декабря 2009

Я использую ContextMenuStrip, чтобы показать пользователю некоторые опции, когда они наводят курсор мыши на ячейки таблицы, вызывая его метод Show(Control, int, int) из события MouseMove таблицы, передавая таблицу как Управляющий параметр.

Если приложение не активно, все работает как задумано; но если приложение активно, события MouseMove перестают срабатывать, как только отображается ContextMenuStrip.

Как получить события перемещения мыши при отображении ContextMenuStrip? Я не хочу добавлять хуки или фильтр приложения, я просто хочу, чтобы поведение неактивного приложения было даже когда приложение активно.

Ответы [ 2 ]

1 голос
/ 07 декабря 2009

Это не просто захват мыши, который легко обойти. Существует внутренний класс с именем «ModalMenuFilter», который активируется при отображении выпадающего списка инструментов, который фильтрует различные сообщения. Включая WM_MOUSEMOVE. Это делается с помощью SetWindowsHookEx (). Он работает, когда ваше приложение не активно, потому что этот хук устанавливается только тогда, когда ваша форма активна.

Ничего из этого не доступно из вашего кода, вам придется использовать Reflection. Мне кажется, что вы можете использовать ModalMenuFilter.RemoveActiveToolStrip (), чтобы отключить фильтр. Посмотрите на Reflector. Однако это более чем вероятно вызывает другие проблемы.

0 голосов
/ 07 декабря 2009

это невозможно, когда отображается полоса контекстного меню, окна меню захватывают мышь

...