WPF等效于Application.AddMessageFilter(Windows窗体)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了WPF等效于Application.AddMessageFilter(Windows窗体)相关的知识,希望对你有一定的参考价值。

我在Application.AddMessageFilter()应用程序中使用WinForms(使用非托管代码时)。

现在我切换到WPF,无法找到此功能。

请告知可以找到或实施的地方。

答案

在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
     }
}
另一答案

如果要监视窗口消息,可以使用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)
{
}

以上是关于WPF等效于Application.AddMessageFilter(Windows窗体)的主要内容,如果未能解决你的问题,请参考以下文章

WPF等效于Application.AddMessageFilter(Windows窗体)

WinForms 等效于 WPF WindowInteropHelper、HwndSource、HwndSourceHook

等效于 Avalonia 的应用程序设置

Datagrid 等效于 HTML 表单占位符属性 [重复]

是否有与 UWP 的 SplitView Hamburger Menu 等效的 WPF?

如何最好地利用新的类型等效功能在 WPF 应用程序中托管 MapPoint 控件