Преглед на файлове

优化交互显示界面

liufei преди 4 години
родител
ревизия
0a89255ad2
променени са 5 файла, в които са добавени 116 реда и са изтрити 52 реда
  1. 2 1
      Control/Windows/IconfontWindow.xaml.cs
  2. 1 0
      GeekDesk.csproj
  3. 3 49
      MainWindow.xaml.cs
  4. 3 2
      Util/CommonCode.cs
  5. 107 0
      Util/ShowWindowFollowMouse.cs

+ 2 - 1
Control/Windows/IconfontWindow.xaml.cs

@@ -10,7 +10,7 @@ using System.Windows;
 using System.Windows.Controls;
 
 using System.Windows.Input;
-
+using static GeekDesk.Util.ShowWindowFollowMouse;
 
 namespace GeekDesk.Control.Windows
 {
@@ -132,6 +132,7 @@ namespace GeekDesk.Control.Windows
                 window = new IconfontWindow(listInfo, menuInfo);
             }
             window.Show();
+            ShowWindowFollowMouse.Show(window, MousePosition.LEFT_CENTER, 0, 0);
         }
 
         private void CustomButton_Click(object sender, RoutedEventArgs e)

+ 1 - 0
GeekDesk.csproj

@@ -173,6 +173,7 @@
     <Compile Include="Util\MouseUtilities.cs" />
     <Compile Include="Util\RegisterUtil.cs" />
     <Compile Include="Util\ShellContextMenu.cs" />
+    <Compile Include="Util\ShowWindowFollowMouse.cs" />
     <Compile Include="Util\StringUtil.cs" />
     <Compile Include="Util\SvgToGeometry.cs" />
     <Compile Include="ViewModel\AppConfig.cs" />

+ 3 - 49
MainWindow.xaml.cs

@@ -18,6 +18,7 @@ using System.Windows.Controls;
 using System.Windows.Input;
 using System.Windows.Interop;
 using System.Windows.Media;
+using static GeekDesk.Util.ShowWindowFollowMouse;
 
 namespace GeekDesk
 {
@@ -260,7 +261,7 @@ namespace GeekDesk
         {
             if (appData.AppConfig.FollowMouse)
             {
-                ShowAppAndFollowMouse();
+                ShowWindowFollowMouse.Show(mainWindow, MousePosition.CENTER, 0, 0);
             } else
             {
                 mainWindow.Visibility = Visibility.Visible;
@@ -268,54 +269,7 @@ namespace GeekDesk
             Keyboard.Focus(mainWindow);
         }
 
-        /// <summary>
-        /// 随鼠标位置显示面板 (鼠标始终在中间)
-        /// </summary>
-        private static void ShowAppAndFollowMouse()
-        {
-            //获取鼠标位置
-            System.Windows.Point p = MouseUtil.GetMousePosition();
-            double left = SystemParameters.VirtualScreenLeft;
-            double top = SystemParameters.VirtualScreenTop;
-            double width = SystemParameters.VirtualScreenWidth;
-            double height = SystemParameters.VirtualScreenHeight;
-            double right = width - Math.Abs(left);
-            double bottom = height - Math.Abs(top);
-
-
-            if (p.X - mainWindow.Width / 2 < left)
-            {
-                //判断是否在最左边缘
-                mainWindow.Left = left;
-            }
-            else if (p.X + mainWindow.Width / 2 > right)
-            {
-                //判断是否在最右边缘
-                mainWindow.Left = right - mainWindow.Width;
-            }
-            else
-            {
-                mainWindow.Left = p.X - mainWindow.Width / 2;
-            }
-
-
-            if (p.Y - mainWindow.Height / 2 < top)
-            {
-                //判断是否在最上边缘
-                mainWindow.Top = top;
-            }
-            else if (p.Y + mainWindow.Height / 2 > bottom)
-            {
-                //判断是否在最下边缘
-                mainWindow.Top = bottom - mainWindow.Height;
-            }
-            else
-            {
-                mainWindow.Top = p.Y - mainWindow.Height / 2;
-            }
-
-            mainWindow.Visibility = Visibility.Visible;
-        }
+       
 
 
         /// <summary>

+ 3 - 2
Util/CommonCode.cs

@@ -1,7 +1,9 @@
 using GeekDesk.Constant;
 using GeekDesk.ViewModel;
+using System;
 using System.IO;
 using System.Runtime.Serialization.Formatters.Binary;
+using System.Windows;
 
 /// <summary>
 /// 提取一些代码
@@ -50,8 +52,7 @@ namespace GeekDesk.Util
             }
         }
 
-
-
+        
 
 
     }

+ 107 - 0
Util/ShowWindowFollowMouse.cs

@@ -0,0 +1,107 @@
+using System;
+using System.Windows;
+
+namespace GeekDesk.Util
+{
+    public class ShowWindowFollowMouse
+    {
+
+        public enum MousePosition
+        {
+            CENTER = 1,
+            LEFT_TOP = 2,
+            LEFT_BOTTOM = 3,
+            RIGHT_TOP = 4,
+            RIGHT_BOTTOM = 5,
+            LEFT_CENTER = 6,
+            RIGHT_CENTER = 7
+        }
+
+        /// <summary>
+        /// 随鼠标位置显示面板 (鼠标始终在中间)
+        /// </summary>
+        public static void Show(Window window, MousePosition position, double widthOffset, double heightOffset)
+        {
+            //获取鼠标位置
+            System.Windows.Point p = MouseUtil.GetMousePosition();
+            double left = SystemParameters.VirtualScreenLeft;
+            double top = SystemParameters.VirtualScreenTop;
+            double width = SystemParameters.VirtualScreenWidth;
+            double height = SystemParameters.VirtualScreenHeight;
+            double right = width - Math.Abs(left);
+            double bottom = height - Math.Abs(top);
+
+            double afterWidth;
+            double afterHeight;
+
+            switch (position)
+            {
+
+                case MousePosition.LEFT_BOTTOM:
+                    afterWidth = 0;
+                    afterHeight = window.Height;
+                    break;
+                case MousePosition.LEFT_TOP:
+                    afterWidth = 0;
+                    afterHeight = 0;
+                    break;
+                case MousePosition.LEFT_CENTER:
+                    afterWidth = 0;
+                    afterHeight = window.Height / 2;
+                    break;
+                case MousePosition.RIGHT_BOTTOM:
+                    afterWidth = window.Width;
+                    afterHeight = window.Height;
+                    break;
+                case MousePosition.RIGHT_TOP:
+                    afterWidth = window.Width;
+                    afterHeight = 0;
+                    break;
+                case MousePosition.RIGHT_CENTER:
+                    afterWidth = window.Width;
+                    afterHeight = window.Height / 2;
+                    break;
+                default:
+                    afterWidth = window.Width / 2;
+                    afterHeight = window.Height / 2;
+                    break;
+            }
+
+            afterWidth += widthOffset;
+            afterHeight -= heightOffset;
+
+            if (p.X - afterWidth < left)
+            {
+                //判断是否在最左边缘
+                window.Left = left;
+            }
+            else if (p.X + afterWidth > right)
+            {
+                //判断是否在最右边缘
+                window.Left = right - window.Width;
+            }
+            else
+            {
+                window.Left = p.X - afterWidth;
+            }
+
+
+            if (p.Y - afterHeight < top)
+            {
+                //判断是否在最上边缘
+                window.Top = top;
+            }
+            else if (p.Y + afterHeight > bottom)
+            {
+                //判断是否在最下边缘
+                window.Top = bottom - window.Height;
+            }
+            else
+            {
+                window.Top = p.Y - afterHeight;
+            }
+            window.Visibility = Visibility.Visible;
+        }
+
+    }
+}