浏览代码

优化贴边交互

liufei 3 年之前
父节点
当前提交
be9dcdb923
共有 5 个文件被更改,包括 99 次插入11 次删除
  1. 9 0
      Constant/RunTimeStatus.cs
  2. 1 0
      MainWindow.xaml
  3. 40 10
      MainWindow.xaml.cs
  4. 29 0
      Util/CommonCode.cs
  5. 20 1
      Util/MarginHide.cs

+ 9 - 0
Constant/RunTimeStatus.cs

@@ -13,5 +13,14 @@ namespace GeekDesk.Constant
         /// 查询框是否在工作
         /// </summary>
         public static bool SEARCH_BOX_SHOW = false;
+
+        /// <summary>
+        /// 贴边隐藏后  以非鼠标经过方式触发显示
+        /// </summary>
+        public static bool MARGIN_HIDE_AND_OTHER_SHOW = false;
+
+
+
+
     }
 }

+ 1 - 0
MainWindow.xaml

@@ -21,6 +21,7 @@
         KeyDown="OnKeyDown"
         Focusable="True"
         MouseDown="MainWindow_MouseDown"
+        MouseEnter="MainWindow_MouseEnter"
         >
     <WindowChrome.WindowChrome>
         <WindowChrome CaptionHeight="0" ResizeBorderThickness="15"/>

+ 40 - 10
MainWindow.xaml.cs

@@ -351,33 +351,53 @@ namespace GeekDesk
             //{
             //    return;
             //}
+
             //修改贴边隐藏状态为未隐藏
-            MarginHide.IS_HIDE = false;
+            if (MarginHide.ON_HIDE)
+            {
+                MarginHide.IS_HIDE = false;
+                if (!CommonCode.MouseInWindow(mainWindow))
+                {
+                    RunTimeStatus.MARGIN_HIDE_AND_OTHER_SHOW = true;
+                    MarginHide.WaitHide(3000);
+                }
+            }
+
             if (appData.AppConfig.FollowMouse)
             {
                 ShowWindowFollowMouse.Show(mainWindow, MousePosition.CENTER, 0, 0, false);
             }
+
             FadeStoryBoard(1, (int)CommonEnum.WINDOW_ANIMATION_TIME, Visibility.Visible);
+
             Keyboard.Focus(mainWindow.EmptyTextBox);
         }
 
         public static void HideApp()
         {
-            if (RunTimeStatus.SEARCH_BOX_SHOW)
+            if (!MarginHide.IS_HIDE)
             {
-                mainWindow.HidedSearchBox();
-                new Thread(() =>
+                if (RunTimeStatus.SEARCH_BOX_SHOW)
                 {
-                    Thread.Sleep(100);
-                    App.Current.Dispatcher.BeginInvoke(new Action(() =>
+                    mainWindow.HidedSearchBox();
+                    new Thread(() =>
                     {
-                        FadeStoryBoard(0, (int)CommonEnum.WINDOW_ANIMATION_TIME, Visibility.Collapsed);
-                    }));
-                }).Start();
+                        Thread.Sleep(100);
+                        App.Current.Dispatcher.BeginInvoke(new Action(() =>
+                        {
+                            FadeStoryBoard(0, (int)CommonEnum.WINDOW_ANIMATION_TIME, Visibility.Collapsed);
+                        }));
+                    }).Start();
+                }
+                else
+                {
+                    FadeStoryBoard(0, (int)CommonEnum.WINDOW_ANIMATION_TIME, Visibility.Collapsed);
+                }
             } else
             {
-                FadeStoryBoard(0, (int)CommonEnum.WINDOW_ANIMATION_TIME, Visibility.Collapsed);
+                ShowApp();
             }
+            
         }
 
         /// <summary>
@@ -596,5 +616,15 @@ namespace GeekDesk
             EmptyTextBox.Focus();
         }
 
+        /// <summary>
+        /// 鼠标进入后 
+        /// </summary>
+        /// <param name="sender"></param>
+        /// <param name="e"></param>
+        private void MainWindow_MouseEnter(object sender, MouseEventArgs e)
+        {
+            //防止延迟贴边隐藏
+            RunTimeStatus.MARGIN_HIDE_AND_OTHER_SHOW = false;
+        }
     }
 }

+ 29 - 0
Util/CommonCode.cs

@@ -222,5 +222,34 @@ namespace GeekDesk.Util
             }
         }
 
+
+
+        /// <summary>
+        /// 判断鼠标是否在窗口内
+        /// </summary>
+        /// <param name="window"></param>
+        /// <returns></returns>
+        public static bool MouseInWindow(Window window)
+        {
+            double windowHeight = window.Height;
+            double windowWidth = window.Width;
+
+            double windowTop = window.Top;
+            double windowLeft = window.Left;
+
+            //获取鼠标位置
+            System.Windows.Point p = MouseUtil.GetMousePosition();
+            double mouseX = p.X;
+            double mouseY = p.Y;
+
+            //鼠标不在窗口上
+            if (mouseX < windowLeft || mouseX > windowLeft + windowWidth
+                || mouseY < windowTop || mouseY > windowTop + windowHeight)
+            {
+                return false;
+            }
+            return true;
+        }
+
     }
 }

+ 20 - 1
Util/MarginHide.cs

@@ -30,6 +30,8 @@ namespace GeekDesk.Util
 
         public static readonly int shadowWidth = 20;
 
+        public static bool ON_HIDE = false;
+
 
         private static double showMarginWidth = 1;
 
@@ -69,7 +71,8 @@ namespace GeekDesk.Util
         #region 窗体贴边隐藏功能
         private static void HideWindow(object o, EventArgs e)
         {
-            if (window.Visibility != Visibility.Visible) return;
+            if (window.Visibility != Visibility.Visible 
+                || RunTimeStatus.MARGIN_HIDE_AND_OTHER_SHOW) return;
 
             double screenLeft = SystemParameters.VirtualScreenLeft;
             double screenTop = SystemParameters.VirtualScreenTop;
@@ -150,6 +153,7 @@ namespace GeekDesk.Util
 
         public static void StartHide()
         {
+            ON_HIDE = true;
             if (timer != null) return;
             timer = new Timer
             {
@@ -161,6 +165,7 @@ namespace GeekDesk.Util
 
         public static void StopHide()
         {
+            ON_HIDE = false;
             if (timer == null) return;
             timer.Stop();
             timer.Dispose();
@@ -295,6 +300,20 @@ namespace GeekDesk.Util
         }
 
 
+        public static void WaitHide(int waitTime)
+        {
+            new System.Threading.Thread(()=>
+            {
+                System.Threading.Thread.Sleep(waitTime);
+                //修改状态为false 继续执行贴边隐藏
+                RunTimeStatus.MARGIN_HIDE_AND_OTHER_SHOW = false;
+            }).Start();
+        }
+
+
+
+
+
     }
 }