From 74e36cc68a2705cb68bd6d723afe8703cdc1ecf1 Mon Sep 17 00:00:00 2001 From: liufei Date: Fri, 7 Jan 2022 20:01:39 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B4=B4=E8=BE=B9=E9=9A=90=E8=97=8F=E4=BC=98?= =?UTF-8?q?=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../PannelCard/LeftCardControl.xaml.cs | 1 + .../PannelCard/RightCardControl.xaml.cs | 8 +- MainWindow.xaml.cs | 42 +++--- Util/MarginHide.cs | 140 +++++++++--------- 4 files changed, 92 insertions(+), 99 deletions(-) diff --git a/Control/UserControls/PannelCard/LeftCardControl.xaml.cs b/Control/UserControls/PannelCard/LeftCardControl.xaml.cs index dbe4646..9b71fb4 100644 --- a/Control/UserControls/PannelCard/LeftCardControl.xaml.cs +++ b/Control/UserControls/PannelCard/LeftCardControl.xaml.cs @@ -204,6 +204,7 @@ namespace GeekDesk.Control.UserControls.PannelCard private void menus_SelectionChanged(object sender, SelectionChangedEventArgs e) { + appData.AppConfig.SelectedMenuIcons = null; //设置对应菜单的图标列表 if (MenuListBox.SelectedIndex == -1) { diff --git a/Control/UserControls/PannelCard/RightCardControl.xaml.cs b/Control/UserControls/PannelCard/RightCardControl.xaml.cs index f6c780b..97a84eb 100644 --- a/Control/UserControls/PannelCard/RightCardControl.xaml.cs +++ b/Control/UserControls/PannelCard/RightCardControl.xaml.cs @@ -154,7 +154,7 @@ namespace GeekDesk.Control.UserControls.PannelCard //如果开启了贴边隐藏 则窗体不贴边才隐藏窗口 if (appData.AppConfig.MarginHide) { - if (!MainWindow.hide.IsMargin()) + if (!MarginHide.IS_HIDE) { MainWindow.HideApp(); } @@ -172,7 +172,7 @@ namespace GeekDesk.Control.UserControls.PannelCard //如果开启了贴边隐藏 则窗体不贴边才隐藏窗口 if (appData.AppConfig.MarginHide) { - if (!MainWindow.hide.IsMargin()) + if (!MarginHide.IS_HIDE) { MainWindow.HideApp(); } @@ -196,7 +196,7 @@ namespace GeekDesk.Control.UserControls.PannelCard //如果开启了贴边隐藏 则窗体不贴边才隐藏窗口 if (appData.AppConfig.MarginHide) { - if (!MainWindow.hide.IsMargin()) + if (!MarginHide.IS_HIDE) { MainWindow.HideApp(); } @@ -279,7 +279,7 @@ namespace GeekDesk.Control.UserControls.PannelCard //如果开启了贴边隐藏 则窗体不贴边才隐藏窗口 if (appData.AppConfig.MarginHide) { - if (!MainWindow.hide.IsMargin()) + if (!MarginHide.IS_HIDE) { MainWindow.HideApp(); } diff --git a/MainWindow.xaml.cs b/MainWindow.xaml.cs index 62dbb2f..2ace6e7 100644 --- a/MainWindow.xaml.cs +++ b/MainWindow.xaml.cs @@ -38,7 +38,6 @@ namespace GeekDesk public static int hotKeyId = -1; public static int toDoHotKeyId = -1; public static MainWindow mainWindow; - public static MarginHide hide; public MainWindow() { LoadData(); @@ -50,10 +49,10 @@ namespace GeekDesk ToDoTask.BackLogCheck(); ////实例化隐藏 Hide类,进行时间timer设置 - hide = new MarginHide(this); + MarginHide.ReadyHide(this); if (appData.AppConfig.MarginHide) { - hide.TimerSet(); + MarginHide.StartHide(); } } @@ -62,7 +61,6 @@ namespace GeekDesk /// private void LoadData() { - GC.KeepAlive(MainWindow.appData); // 持活 this.DataContext = appData; if (appData.MenuList.Count == 0) { @@ -131,7 +129,7 @@ namespace GeekDesk { if (MotionControl.hotkeyFinished) { - if (mainWindow.Visibility == Visibility.Collapsed || mainWindow.Opacity == 0 || MarginHide.isHide) + if (mainWindow.Visibility == Visibility.Collapsed || mainWindow.Opacity == 0 || MarginHide.IS_HIDE) { ShowApp(); } @@ -337,7 +335,7 @@ namespace GeekDesk // return; //} //修改贴边隐藏状态为未隐藏 - MarginHide.isHide = false; + MarginHide.IS_HIDE = false; if (appData.AppConfig.FollowMouse) { ShowWindowFollowMouse.Show(mainWindow, MousePosition.CENTER, 0, 0, false); @@ -395,20 +393,6 @@ namespace GeekDesk p.Start(); } - /// - /// 右键任务栏图标退出 - /// - /// - /// - private void ExitApp(object sender, RoutedEventArgs e) - { - if (appData.AppConfig.MouseMiddleShow) - { - MouseHookThread.Dispose(); - } - hide.TimerStop(); - Application.Current.Shutdown(); - } @@ -455,7 +439,7 @@ namespace GeekDesk if (appData.AppConfig.AppHideType == AppHideType.LOST_FOCUS) { //如果开启了贴边隐藏 则窗体不贴边才隐藏窗口 - if (appData.AppConfig.MarginHide && !hide.IsMargin()) + if (appData.AppConfig.MarginHide && !MarginHide.IS_HIDE) { this.Visibility = Visibility.Collapsed; } @@ -480,6 +464,21 @@ namespace GeekDesk } } + + + /// + /// 右键任务栏图标退出 + /// + /// + /// + private void ExitApp(object sender, RoutedEventArgs e) + { + if (appData.AppConfig.MouseMiddleShow) + { + MouseHookThread.Dispose(); + } + Application.Current.Shutdown(); + } /// /// 重启 /// @@ -491,7 +490,6 @@ namespace GeekDesk { MouseHookThread.Dispose(); } - hide.TimerStop(); Process p = new Process(); p.StartInfo.FileName = Constants.APP_DIR + "GeekDesk.exe"; diff --git a/Util/MarginHide.cs b/Util/MarginHide.cs index 772f993..63352c6 100644 --- a/Util/MarginHide.cs +++ b/Util/MarginHide.cs @@ -26,27 +26,28 @@ namespace GeekDesk.Util public class MarginHide { - readonly Window window;//定义使用该方法的窗体 + private static Window window;//定义使用该方法的窗体 - private readonly int hideTime = 200; + private static readonly int hideTime = 200; + private static readonly int fadeHideTime = 180; + private static readonly int fadeShowTime = 200; + private static readonly int taskTime = 250; - private readonly int fadeHideTime = 180; + private static double showMarginWidth = 1; - private readonly int fadeShowTime = 200; + public static bool IS_RUN = false; + public static bool IS_HIDE = false; - private readonly int taskTime = 250; + private static Timer timer = null; - private double showMarginWidth = 1; - -#pragma warning disable CS0414 // 字段“MarginHide.isHide”已被赋值,但从未使用过它的值 - public static bool isHide = false; -#pragma warning restore CS0414 // 字段“MarginHide.isHide”已被赋值,但从未使用过它的值 - - public Timer timer; - //构造函数,传入将要匹配的窗体 - public MarginHide(Window window) + public static void ReadyHide(Window window) { - this.window = window; + MarginHide.window = window; + if (timer != null) return; + timer = new Timer();//添加timer计时器,隐藏功能 + timer.Interval = taskTime; + timer.Tick += HideWindow; + timer.Start(); } @@ -54,7 +55,7 @@ namespace GeekDesk.Util /// 窗体是否贴边 /// /// - public bool IsMargin() + public static bool IsMargin() { double screenLeft = SystemParameters.VirtualScreenLeft; double screenTop = SystemParameters.VirtualScreenTop; @@ -74,9 +75,9 @@ namespace GeekDesk.Util #region 窗体贴边隐藏功能 - private void TimerDealy(object o, EventArgs e) + private static void HideWindow(object o, EventArgs e) { - if (window.Visibility != Visibility.Visible) return; + if (window.Visibility != Visibility.Visible || !IS_RUN) return; double screenLeft = SystemParameters.VirtualScreenLeft; double screenTop = SystemParameters.VirtualScreenTop; @@ -95,12 +96,12 @@ namespace GeekDesk.Util //鼠标不在窗口上 if ((mouseX < windowLeft || mouseX > windowLeft + windowWidth - || mouseY < windowTop || mouseY > windowTop + windowHeight) && !isHide) + || mouseY < windowTop || mouseY > windowTop + windowHeight) && !IS_HIDE) { //上方隐藏条件 if (windowTop <= screenTop) { - isHide = true; + IS_HIDE = true; FadeAnimation(1, 0); HideAnimation(windowTop, screenTop - windowHeight + showMarginWidth, Window.TopProperty, HideType.TOP_HIDE); return; @@ -108,7 +109,7 @@ namespace GeekDesk.Util //左侧隐藏条件 if (windowLeft <= screenLeft) { - isHide = true; + IS_HIDE = true; FadeAnimation(1, 0); HideAnimation(windowLeft, screenLeft - windowWidth + showMarginWidth, Window.LeftProperty, HideType.LEFT_HIDE); return; @@ -116,18 +117,18 @@ namespace GeekDesk.Util //右侧隐藏条件 if (windowLeft + windowWidth + Math.Abs(screenLeft) >= screenWidth) { - isHide = true; + IS_HIDE = true; FadeAnimation(1, 0); HideAnimation(windowLeft, screenWidth - Math.Abs(screenLeft) - showMarginWidth, Window.LeftProperty, HideType.RIGHT_HIDE); return; } } else if (mouseX >= windowLeft && mouseX <= windowLeft + windowWidth - && mouseY >= windowTop && mouseY <= windowTop + windowHeight && isHide) + && mouseY >= windowTop && mouseY <= windowTop + windowHeight && IS_HIDE) { //上方显示 if (windowTop <= screenTop - showMarginWidth) { - isHide = false; + IS_HIDE = false; HideAnimation(windowTop, screenTop, Window.TopProperty, HideType.TOP_SHOW); FadeAnimation(0, 1); return; @@ -135,7 +136,7 @@ namespace GeekDesk.Util //左侧显示 if (windowLeft <= screenLeft - showMarginWidth) { - isHide = false; + IS_HIDE = false; HideAnimation(windowLeft, screenLeft, Window.LeftProperty, HideType.LEFT_SHOW); FadeAnimation(0, 1); return; @@ -143,7 +144,7 @@ namespace GeekDesk.Util //右侧显示 if (windowLeft + Math.Abs(screenLeft) == screenWidth - showMarginWidth) { - isHide = false; + IS_HIDE = false; HideAnimation(windowLeft, screenWidth - Math.Abs(screenLeft) - windowWidth, Window.LeftProperty, HideType.RIGHT_SHOW); FadeAnimation(0, 1); return; @@ -154,64 +155,57 @@ namespace GeekDesk.Util #endregion - public void TimerSet() + public static void StartHide() { - if (timer != null) return; - timer = new Timer();//添加timer计时器,隐藏功能 - #region 计时器设置,隐藏功能 - timer.Interval = taskTime; - timer.Tick += TimerDealy; - timer.Start(); - #endregion + IS_RUN = true; } - public void TimerStop() + public static void StopHide() { - if (timer == null) return; - timer.Stop(); - timer.Dispose(); - timer = null; + IS_RUN = false; //功能关闭 如果界面是隐藏状态 那么要显示界面 ↓ - - double screenLeft = SystemParameters.VirtualScreenLeft; - double screenTop = SystemParameters.VirtualScreenTop; - double screenWidth = SystemParameters.VirtualScreenWidth; - - double windowWidth = window.Width; - - double windowTop = window.Top; - double windowLeft = window.Left; - - //左侧显示 - if (windowLeft <= screenLeft - showMarginWidth) + if (IS_HIDE) { - isHide = false; - FadeAnimation(0, 1); - HideAnimation(windowLeft, screenLeft, Window.LeftProperty, HideType.LEFT_SHOW); - return; - } + double screenLeft = SystemParameters.VirtualScreenLeft; + double screenTop = SystemParameters.VirtualScreenTop; + double screenWidth = SystemParameters.VirtualScreenWidth; - //上方显示 - if (windowTop <= screenTop - showMarginWidth) - { - isHide = false; - FadeAnimation(0, 1); - HideAnimation(windowTop, screenTop, Window.TopProperty, HideType.TOP_SHOW); - return; - } + double windowWidth = window.Width; - //右侧显示 - if (windowLeft + Math.Abs(screenLeft) == screenWidth - showMarginWidth) - { - isHide = false; - FadeAnimation(0, 1); - HideAnimation(windowLeft, screenWidth - Math.Abs(screenLeft) - windowWidth, Window.LeftProperty, HideType.RIGHT_SHOW); - return; + double windowTop = window.Top; + double windowLeft = window.Left; + + //左侧显示 + if (windowLeft <= screenLeft - showMarginWidth) + { + IS_HIDE = false; + FadeAnimation(0, 1); + HideAnimation(windowLeft, screenLeft, Window.LeftProperty, HideType.LEFT_SHOW); + return; + } + + //上方显示 + if (windowTop <= screenTop - showMarginWidth) + { + IS_HIDE = false; + FadeAnimation(0, 1); + HideAnimation(windowTop, screenTop, Window.TopProperty, HideType.TOP_SHOW); + return; + } + + //右侧显示 + if (windowLeft + Math.Abs(screenLeft) == screenWidth - showMarginWidth) + { + IS_HIDE = false; + FadeAnimation(0, 1); + HideAnimation(windowLeft, screenWidth - Math.Abs(screenLeft) - windowWidth, Window.LeftProperty, HideType.RIGHT_SHOW); + return; + } } } - private void HideAnimation(double from, double to, DependencyProperty property, HideType hideType) + private static void HideAnimation(double from, double to, DependencyProperty property, HideType hideType) { double toTemp = to; @@ -261,7 +255,7 @@ namespace GeekDesk.Util window.BeginAnimation(property, da); } - private void FadeAnimation(double from, double to) + private static void FadeAnimation(double from, double to) { double time; if (to == 0D)