WPF-эквивалент Application.AddMessageFilter (Windows Forms) - PullRequest
7 голосов
/ 26 января 2009

Я использовал Application.AddMessageFilter() в моих WinForms приложениях (при работе с неуправляемым кодом).

Теперь я переключаюсь на WPF и не могу найти эту функцию.

Посоветуйте, пожалуйста, где его можно найти или реализовать.

Ответы [ 2 ]

4 голосов
/ 01 марта 2018

В WPF вы можете использовать ComponentDispatcher.ThreadFilterMessage событие.

ComponentDispatcher.ThreadFilterMessage += ComponentDispatcher_ThreadFilterMessage;
private void ComponentDispatcher_ThreadFilterMessage(ref MSG msg, ref bool handled)
{
     if (msg.message == 513)//MOUSE_LEFTBUTTON_DOWN
     {
         //todo
     }
}
0 голосов
/ 18 августа 2016

Если вы хотите отслеживать сообщение в окне, вы можете использовать метод HwndSource.AddHook. В следующем примере показано, как использовать метод Hwnd.AddHook. Если вы хотите отслеживать сообщение области приложения, вы можете попробовать использовать класс ComponentDispatcher.

private void Button_Click(object sender, RoutedEventArgs e)
{
    Window wnd = new Window();
    wnd.Loaded += delegate
    {
        HwndSource source = (HwndSource)PresentationSource.FromDependencyObject(wnd);
        source.AddHook(WindowProc);
    };
    wnd.Show();
}
private static IntPtr WindowProc(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled)
{
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...