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
Datagrid 等效于 HTML 表单占位符属性 [重复]