MainWindow.xaml.cs 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311
  1. using DraggAnimatedPanelExample;
  2. using GeekDesk.Constant;
  3. using GeekDesk.Control;
  4. using GeekDesk.Util;
  5. using GeekDesk.ViewModel;
  6. using SharpShell.SharpContextMenu;
  7. using System;
  8. using System.Collections.ObjectModel;
  9. using System.Diagnostics;
  10. using System.Drawing;
  11. using System.IO;
  12. using System.Windows;
  13. using System.Windows.Controls;
  14. using System.Windows.Input;
  15. using System.Windows.Interop;
  16. using System.Windows.Media;
  17. namespace GeekDesk
  18. {
  19. /// <summary>
  20. /// MainWindow.xaml 的交互逻辑
  21. /// </summary>
  22. ///
  23. public partial class MainWindow : Window
  24. {
  25. public static AppData appData = CommonCode.GetAppDataByFile();
  26. public MainWindow()
  27. {
  28. InitializeComponent();
  29. LoadData();
  30. this.Topmost = true;
  31. this.Loaded += Window_Loaded;
  32. this.SizeChanged += MainWindow_Resize;
  33. }
  34. private void LoadData()
  35. {
  36. this.DataContext = appData;
  37. if (appData.MenuList.Count == 0)
  38. {
  39. appData.MenuList.Add(new MenuInfo() { MenuName = "NewMenu", MenuId = System.Guid.NewGuid().ToString(), MenuEdit = Visibility.Collapsed});
  40. }
  41. this.Width = appData.AppConfig.WindowWidth;
  42. this.Height = appData.AppConfig.WindowHeight;
  43. }
  44. void Window_Loaded(object sender, RoutedEventArgs e)
  45. {
  46. if (!appData.AppConfig.StartedShowPanel)
  47. {
  48. this.Visibility = Visibility.Collapsed;
  49. }
  50. //加载完毕注册热键
  51. Hotkey.Regist(this, HotkeyModifiers.MOD_CONTROL, Key.Y, ()=>
  52. {
  53. if (this.Visibility == Visibility.Collapsed)
  54. {
  55. ShowApp();
  56. } else
  57. {
  58. this.Visibility = Visibility.Collapsed;
  59. }
  60. });
  61. }
  62. void MainWindow_Resize(object sender, System.EventArgs e)
  63. {
  64. if (this.DataContext != null)
  65. {
  66. AppData appData = this.DataContext as AppData;
  67. appData.AppConfig.WindowWidth = this.Width;
  68. appData.AppConfig.WindowHeight = this.Height;
  69. }
  70. }
  71. private void DragMove(object sender, MouseEventArgs e)
  72. {
  73. //if (e.LeftButton == MouseButtonState.Pressed)
  74. //{
  75. // this.DragMove();
  76. //}
  77. if (e.LeftButton == MouseButtonState.Pressed)
  78. {
  79. var windowMode = this.ResizeMode;
  80. if (this.ResizeMode != ResizeMode.NoResize)
  81. {
  82. this.ResizeMode = ResizeMode.NoResize;
  83. }
  84. this.UpdateLayout();
  85. /* 当点击拖拽区域的时候,让窗口跟着移动
  86. (When clicking the drag area, make the window follow) */
  87. DragMove();
  88. if (this.ResizeMode != windowMode)
  89. {
  90. this.ResizeMode = windowMode;
  91. }
  92. this.UpdateLayout();
  93. }
  94. }
  95. /// <summary>
  96. /// 关闭按钮单击事件
  97. /// </summary>
  98. /// <param name="sender"></param>
  99. /// <param name="e"></param>
  100. private void CloseButtonClick(object sender, RoutedEventArgs e)
  101. {
  102. this.Visibility = Visibility.Collapsed;
  103. }
  104. ///// <summary>
  105. ///// 左侧栏宽度改变 持久化
  106. ///// </summary>
  107. ///// <param name="sender"></param>
  108. ///// <param name="e"></param>
  109. //private void LeftCardResize(object sender, System.Windows.Controls.Primitives.DragCompletedEventArgs e)
  110. //{
  111. // appData.AppConfig.MenuCardWidth = LeftColumn.Width.Value;
  112. //}
  113. /// <summary>
  114. /// 随鼠标位置显示面板 (鼠标始终在中间)
  115. /// </summary>
  116. private void ShowAppAndFollowMouse()
  117. {
  118. //获取鼠标位置
  119. System.Windows.Point p = MouseUtil.GetMousePosition();
  120. double left = SystemParameters.VirtualScreenLeft;
  121. double top = SystemParameters.VirtualScreenTop;
  122. double width = SystemParameters.VirtualScreenWidth;
  123. double height = SystemParameters.VirtualScreenHeight;
  124. double right = width - Math.Abs(left);
  125. double bottom = height - Math.Abs(top);
  126. if (p.X - this.Width / 2 < left)
  127. {
  128. //判断是否在最左边缘
  129. this.Left = left;
  130. } else if (p.X + this.Width / 2 > right)
  131. {
  132. //判断是否在最右边缘
  133. this.Left = right - this.Width;
  134. } else
  135. {
  136. this.Left = p.X - this.Width / 2;
  137. }
  138. if (p.Y - this.Height / 2 < top)
  139. {
  140. //判断是否在最上边缘
  141. this.Top = top;
  142. } else if (p.Y + this.Height/2 > bottom)
  143. {
  144. //判断是否在最下边缘
  145. this.Top = bottom - this.Height;
  146. } else
  147. {
  148. this.Top = p.Y - this.Height / 2;
  149. }
  150. this.Visibility = Visibility.Visible;
  151. }
  152. /// <summary>
  153. /// 右键任务栏图标 显示主面板
  154. /// </summary>
  155. /// <param name="sender"></param>
  156. /// <param name="e"></param>
  157. private void ShowApp(object sender, RoutedEventArgs e)
  158. {
  159. ShowApp();
  160. }
  161. private void ShowApp()
  162. {
  163. if (appData.AppConfig.FollowMouse)
  164. {
  165. ShowAppAndFollowMouse();
  166. } else
  167. {
  168. this.Visibility = Visibility.Visible;
  169. }
  170. Keyboard.Focus(this);
  171. }
  172. /// <summary>
  173. /// 图片图标单击事件
  174. /// </summary>
  175. /// <param name="sender"></param>
  176. /// <param name="e"></param>
  177. private void NotifyIcon_Click(object sender, RoutedEventArgs e)
  178. {
  179. if (this.Visibility == Visibility.Collapsed)
  180. {
  181. ShowApp();
  182. }
  183. else
  184. {
  185. this.Visibility = Visibility.Collapsed;
  186. }
  187. }
  188. /// <summary>
  189. /// 右键任务栏图标 设置
  190. /// </summary>
  191. /// <param name="sender"></param>
  192. /// <param name="e"></param>
  193. private void ConfigApp(object sender, RoutedEventArgs e)
  194. {
  195. //MenuInfo menuInfo = ((MenuItem)sender).Tag as MenuInfo;
  196. //appData.MenuList.Remove(menuInfo);
  197. //CommonCode.SaveAppData(appData);
  198. }
  199. /// <summary>
  200. /// 右键任务栏图标退出
  201. /// </summary>
  202. /// <param name="sender"></param>
  203. /// <param name="e"></param>
  204. private void ExitApp(object sender, RoutedEventArgs e)
  205. {
  206. Application.Current.Shutdown();
  207. }
  208. //public static void ShowContextMenu(IntPtr hAppWnd, Window taskBar, System.Windows.Point pt)
  209. //{
  210. // WindowInteropHelper helper = new WindowInteropHelper(taskBar);
  211. // IntPtr callingTaskBarWindow = helper.Handle;
  212. // IntPtr wMenu = GetSystemMenu(hAppWnd, false);
  213. // // Display the menu
  214. // uint command = TrackPopupMenuEx(wMenu, TPM.LEFTBUTTON | TPM.RETURNCMD, (int) pt.X, (int) pt.Y, callingTaskBarWindow, IntPtr.Zero);
  215. // if (command == 0) return;
  216. // PostMessage(hAppWnd, WM.SYSCOMMAND, new IntPtr(command), IntPtr.Zero);
  217. //}
  218. /// <summary>
  219. /// 设置按钮左键弹出菜单
  220. /// </summary>
  221. /// <param name="sender"></param>
  222. /// <param name="e"></param>
  223. private void ConfigButtonClick(object sender, RoutedEventArgs e)
  224. {
  225. //SettingMenu.IsOpen = true;
  226. new ConfigWindow(appData.AppConfig).Show();
  227. }
  228. /// <summary>
  229. /// 禁用设置按钮右键菜单
  230. /// </summary>
  231. /// <param name="sender"></param>
  232. /// <param name="e"></param>
  233. private void SettingButton_Initialized(object sender, EventArgs e)
  234. {
  235. SettingButton.ContextMenu = null;
  236. }
  237. private void App_LostFocus(object sender, RoutedEventArgs e)
  238. {
  239. if (appData.AppConfig.AppHideType == AppHideType.LOST_FOCUS)
  240. {
  241. this.Visibility = Visibility.Collapsed;
  242. }
  243. }
  244. private void window_Deactivated(object sender, EventArgs e)
  245. {
  246. if (appData.AppConfig.AppHideType == AppHideType.LOST_FOCUS)
  247. {
  248. this.Visibility = Visibility.Collapsed;
  249. }
  250. }
  251. }
  252. }