WPF 等效于 Application.AddMessageFilter(Windows 窗体)
Posted
技术标签:
【中文标题】WPF 等效于 Application.AddMessageFilter(Windows 窗体)【英文标题】:WPF equivalent of Application.AddMessageFilter (Windows Forms) 【发布时间】:2010-10-03 12:06:39 【问题描述】:我在我的WinForms
应用程序中使用了Application.AddMessageFilter()
(使用非托管代码时)。
现在我切换到WPF
,但找不到此功能。
请告知在哪里可以找到或实施它。
【问题讨论】:
http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/97cc207c-49a7-4a49-9fc1-fdf3b5d904d2/ 看起来像一个解决方案/编辑:类似的问题在这里:http://***.com/questions/476084/c-twain-interaction 【参考方案1】:在 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
【讨论】:
【参考方案2】:如果你想监听一个窗口消息,你可以使用 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 表单占位符属性 [重复]