Захват всех событий мыши в пользовательском контроле - PullRequest
2 голосов
/ 12 декабря 2011

Я пытаюсь захватить все события мыши в пользовательском элементе управления (даже те, которые происходят в дочерних элементах управления).Для этого я использую «override WndProc» -approach:

protected override void WndProc(ref Message m)
{
  System.Diagnostics.Debug.WriteLine(m.Msg.ToString());
  base.WndProc(ref m);
}

Меня особенно интересуют события мыши, но это, похоже, не работает.Я получаю события мыши вверх / вниз, но я не получаю события перемещения мыши и колеса мыши.

Есть идеи?

Ответы [ 2 ]

3 голосов
/ 12 декабря 2011

Лучшее, что вы можете сделать, это внедрить IMessageFilter в вашем контроле.

 public class CustomMessageFilter:UserControl,IMessageFilter
{
    public bool PreFilterMessage(ref Message m)
    {
        //Process your message here
        throw new NotImplementedException();

    }
}

Вы можете написать свою логику фильтрации сообщений в методе PreFilterMessage . Затем просто установите его в список фильтра сообщений в методе Main.

 Application.AddMessageFilter(new CustomMessageFilter());

Это ловушка уровня приложения, что означает, что вы можете контролировать все сообщения Win32 внутри приложения.

0 голосов
/ 30 декабря 2011

Правильный способ перехватить все события мыши в элементе управления - вызвать метод Control.Capture этого элемента управления.

Обычно это временное состояние, такое как перетаскивание, отрисовка пользователя и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...