我在我的WinForms
應用程序中使用Application.AddMessageFilter()
(使用非託管代碼時)。WPF相當於Application.AddMessageFilter(Windows窗體)
現在我切換到WPF
並且無法找到此功能。
請指教哪裏可以找到或實施它。
我在我的WinForms
應用程序中使用Application.AddMessageFilter()
(使用非託管代碼時)。WPF相當於Application.AddMessageFilter(Windows窗體)
現在我切換到WPF
並且無法找到此功能。
請指教哪裏可以找到或實施它。
如果要監視窗口消息,可以使用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中,你可以使用ComponentDispatcher.ThreadFilterMessage
事件。
ComponentDispatcher.ThreadFilterMessage += ComponentDispatcher_ThreadFilterMessage;
private void ComponentDispatcher_ThreadFilterMessage(ref MSG msg, ref bool handled)
{
if (msg.message == 513)//MOUSE_LEFTBUTTON_DOWN
{
//todo
}
}
[http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/97cc207c-49a7-4a49-9fc1-fdf3b5d904d2/](http://social.msdn.microsoft .com/Forums/en-US/wpf/thread/97cc207c-49a7-4a49-9fc1-fdf3b5d904d2 /)看起來像一個解決方案/編輯: 類似的問題在這裏:[http://stackoverflow.com/questions/476084/c -twain相互作用](http://stackoverflow.com/questions/476084/c-twain-interaction) – Sebastian 2009-01-26 07:50:00