很遗憾,我通过SPY++测试了下,在模态窗打开后,鼠标点击父窗体,系统并没有向模态窗体发送消息。也就是说,我们无法通过发送系统消息来通知模态窗体鼠标动作。 不过我同时也测试了他的父窗体的消息,即使有一个模态的子窗体显示在上方,他的父窗体还是会获得系统发送的鼠标指针消息的:WM_SETCURSOR
这样子的话,有一个折中方案,你可以通过抓取父窗体的消息来知道是否模态子窗体需要闪烁。
const int WM_SETCURSOR = 0x20; public MainWindow() { InitializeComponent(); this.Loaded += new RoutedEventHandler(MainWindow_Loaded); } void MainWindow_Loaded(object sender, RoutedEventArgs e) { IntPtr hwnd = new WindowInteropHelper(this).Handle; HwndSource.FromHwnd(hwnd).AddHook(new HwndSourceHook(WndProc)); } IntPtr WndProc(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled) { if (msg == WM_SETCURSOR) { // 0x202fffe: WM_LBUTTONUP and HitTest // 0x201fffe: WM_LBUTTONDOWN and HitTest if (lParam.ToInt32() == 0x202fffe || lParam.ToInt32() == 0x201fffe) { if (win.IsActive) win.Blink(); } } return IntPtr.Zero; }参考:
http://blog.csdn.net/woshinia/article/details/8032183 http://blog.csdn.net/Lucifinil_S/article/details/6384111 http://social.msdn.microsoft.com/Forums/zh-CN/wpfzhchs/thread/4ca0e954-0536-446c-84af-2c104c5cca6b/转载于:https://www.cnblogs.com/wuhenke/archive/2012/10/11/2720133.html