diff --git a/Constant/RunTimeStatus.cs b/Constant/RunTimeStatus.cs index ae58d12..80ac272 100644 --- a/Constant/RunTimeStatus.cs +++ b/Constant/RunTimeStatus.cs @@ -13,5 +13,14 @@ namespace GeekDesk.Constant /// 查询框是否在工作 /// public static bool SEARCH_BOX_SHOW = false; + + /// + /// 贴边隐藏后 以非鼠标经过方式触发显示 + /// + public static bool MARGIN_HIDE_AND_OTHER_SHOW = false; + + + + } } diff --git a/MainWindow.xaml b/MainWindow.xaml index 76fe69f..ce1e33f 100644 --- a/MainWindow.xaml +++ b/MainWindow.xaml @@ -21,6 +21,7 @@ KeyDown="OnKeyDown" Focusable="True" MouseDown="MainWindow_MouseDown" + MouseEnter="MainWindow_MouseEnter" > diff --git a/MainWindow.xaml.cs b/MainWindow.xaml.cs index 48eb13e..53e1fdd 100644 --- a/MainWindow.xaml.cs +++ b/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(); } + } /// @@ -596,5 +616,15 @@ namespace GeekDesk EmptyTextBox.Focus(); } + /// + /// 鼠标进入后 + /// + /// + /// + private void MainWindow_MouseEnter(object sender, MouseEventArgs e) + { + //防止延迟贴边隐藏 + RunTimeStatus.MARGIN_HIDE_AND_OTHER_SHOW = false; + } } } diff --git a/Util/CommonCode.cs b/Util/CommonCode.cs index 059743c..65f2b1c 100644 --- a/Util/CommonCode.cs +++ b/Util/CommonCode.cs @@ -222,5 +222,34 @@ namespace GeekDesk.Util } } + + + /// + /// 判断鼠标是否在窗口内 + /// + /// + /// + 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; + } + } } diff --git a/Util/MarginHide.cs b/Util/MarginHide.cs index c539a0a..50e99ef 100644 --- a/Util/MarginHide.cs +++ b/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(); + } + + + + + } }