• 鼠标点击主窗体时,模态子窗口是WindowStyle.None时如何闪烁


    闪烁消息接收处理资源:
    在学MFC 的第一课就是讲windows的消息机制,其中这一部分是通过WndProc这个函数来完成的,用一个消息循环来捕捉消息。  
    虽然在WPF里 没有 WndProc 这个函数,但是提供了另一种方法来完成挂钩的功能。  
    在WinForm  里 只需重载 WndProc 函数便可完成消息响应   
    private const int WM_SIZEING = 0x0214;   //窗口改变大小消息  
          protected override void WndProc(ref System.Windows.Forms.Message m )  
          {  
             switch(m.Msg)   
             {         
                case WM_SIZEING:  
                   //...........你的代码  
                   break;  
                default:   
                   base.WndProc(ref m);   // 调用基类函数处理其他消息。   
                   break;   
             }   
          }  
     
     

    很遗憾,我通过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;
        }

    参考:

  • 相关阅读:
    HDU 1269 迷宫城堡
    HDU 4771 Stealing Harry Potter's Precious
    HDU 4772 Zhuge Liang's Password
    HDU 1690 Bus System
    HDU 2112 HDU Today
    HDU 1385 Minimum Transport Cost
    HDU 1596 find the safest road
    HDU 2680 Choose the best route
    HDU 2066 一个人的旅行
    AssetBundle管理机制(下)
  • 原文地址:https://www.cnblogs.com/wuhenke/p/2720133.html
Copyright © 2020-2023  润新知