2009-12-07 1 views
2

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

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

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

+0

Вы просто показываете информацию, или вы даете пользователям возможность щелчка на ContextMenuStrip, чтобы что-то произошло? – Stewbob

ответ

0

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

+0

, так почему это работает, когда приложение неактивно? – Simon

+0

Что значит «приложение неактивно»? – serhio

1

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

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