Files
community/Ink Canvas/MainWindow_cs/MW_TrayIcon.cs
T

187 lines
8.1 KiB
C#
Raw Normal View History

2025-08-03 16:46:33 +08:00
using Hardcodet.Wpf.TaskbarNotification;
using Ink_Canvas.Helpers;
using iNKORE.UI.WPF.Modern.Controls;
using System;
2025-05-25 09:29:48 +08:00
using System.Diagnostics;
using System.Windows;
using System.Windows.Controls;
2025-07-28 14:40:44 +08:00
using System.Windows.Forms;
2025-05-25 09:29:48 +08:00
using System.Windows.Interop;
2025-07-28 14:40:44 +08:00
using Application = System.Windows.Application;
using ContextMenu = System.Windows.Controls.ContextMenu;
using MenuItem = System.Windows.Controls.MenuItem;
2025-05-25 09:29:48 +08:00
namespace Ink_Canvas
{
2025-08-03 16:46:33 +08:00
public partial class App : Application
{
2025-05-25 09:29:48 +08:00
2025-08-03 16:46:33 +08:00
private void SysTrayMenu_Opened(object sender, RoutedEventArgs e)
{
2025-05-25 09:29:48 +08:00
var s = (ContextMenu)sender;
var FoldFloatingBarTrayIconMenuItemIconEyeOff =
2025-08-03 16:46:33 +08:00
(Image)((Grid)((MenuItem)s.Items[s.Items.Count - 5]).Icon).Children[0];
2025-05-25 09:29:48 +08:00
var FoldFloatingBarTrayIconMenuItemIconEyeOn =
(Image)((Grid)((MenuItem)s.Items[s.Items.Count - 5]).Icon).Children[1];
var FoldFloatingBarTrayIconMenuItemHeaderText =
(TextBlock)((SimpleStackPanel)((MenuItem)s.Items[s.Items.Count - 5]).Header).Children[0];
var ResetFloatingBarPositionTrayIconMenuItem = (MenuItem)s.Items[s.Items.Count - 4];
var HideICCMainWindowTrayIconMenuItem = (MenuItem)s.Items[s.Items.Count - 9];
2025-07-28 14:40:44 +08:00
var mainWin = (MainWindow)Current.MainWindow;
2025-08-03 16:46:33 +08:00
if (mainWin.IsLoaded)
{
2025-05-25 09:29:48 +08:00
// 判斷是否在收納模式中
2025-08-03 16:46:33 +08:00
if (mainWin.isFloatingBarFolded)
{
2025-05-25 09:29:48 +08:00
FoldFloatingBarTrayIconMenuItemIconEyeOff.Visibility = Visibility.Hidden;
FoldFloatingBarTrayIconMenuItemIconEyeOn.Visibility = Visibility.Visible;
FoldFloatingBarTrayIconMenuItemHeaderText.Text = "退出收纳模式";
2025-08-03 16:46:33 +08:00
if (!HideICCMainWindowTrayIconMenuItem.IsChecked)
{
2025-05-25 09:29:48 +08:00
ResetFloatingBarPositionTrayIconMenuItem.IsEnabled = false;
ResetFloatingBarPositionTrayIconMenuItem.Opacity = 0.5;
}
2025-08-03 16:46:33 +08:00
}
else
{
2025-05-25 09:29:48 +08:00
FoldFloatingBarTrayIconMenuItemIconEyeOff.Visibility = Visibility.Visible;
FoldFloatingBarTrayIconMenuItemIconEyeOn.Visibility = Visibility.Hidden;
FoldFloatingBarTrayIconMenuItemHeaderText.Text = "切换为收纳模式";
2025-08-03 16:46:33 +08:00
if (!HideICCMainWindowTrayIconMenuItem.IsChecked)
{
2025-05-25 09:29:48 +08:00
ResetFloatingBarPositionTrayIconMenuItem.IsEnabled = true;
ResetFloatingBarPositionTrayIconMenuItem.Opacity = 1;
}
2025-08-03 16:46:33 +08:00
2025-05-25 09:29:48 +08:00
}
}
}
2025-08-03 16:46:33 +08:00
private void CloseAppTrayIconMenuItem_Clicked(object sender, RoutedEventArgs e)
{
2025-07-28 14:40:44 +08:00
var mainWin = (MainWindow)Current.MainWindow;
2025-08-03 16:46:33 +08:00
if (mainWin.IsLoaded)
{
2025-07-28 14:40:44 +08:00
IsAppExitByUser = true;
Current.Shutdown();
2025-06-12 10:34:29 +08:00
// mainWin.BtnExit_Click(null,null);
}
2025-05-25 09:29:48 +08:00
}
2025-08-03 16:46:33 +08:00
private void RestartAppTrayIconMenuItem_Clicked(object sender, RoutedEventArgs e)
{
2025-07-28 14:40:44 +08:00
var mainWin = (MainWindow)Current.MainWindow;
2025-08-03 16:46:33 +08:00
if (mainWin.IsLoaded)
{
2025-07-28 14:40:44 +08:00
IsAppExitByUser = true;
2025-08-03 16:46:33 +08:00
try
{
2025-07-29 02:33:19 +08:00
// 启动新实例
string exePath = Process.GetCurrentProcess().MainModule.FileName;
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.FileName = exePath;
startInfo.UseShellExecute = true;
2025-08-03 16:46:33 +08:00
// 启动进程但不等待
Process.Start(startInfo);
2025-08-03 16:46:33 +08:00
}
catch (Exception ex)
{
LogHelper.NewLog($"重启程序时出错: {ex.Message}");
}
2025-08-03 16:46:33 +08:00
// 退出当前实例
2025-07-28 14:40:44 +08:00
Current.Shutdown();
2025-06-13 09:19:44 +08:00
}
2025-05-25 09:29:48 +08:00
}
2025-08-03 16:46:33 +08:00
private void ForceFullScreenTrayIconMenuItem_Clicked(object sender, RoutedEventArgs e)
{
2025-07-28 14:40:44 +08:00
var mainWin = (MainWindow)Current.MainWindow;
2025-08-03 16:46:33 +08:00
if (mainWin.IsLoaded)
{
2025-05-25 09:29:48 +08:00
Ink_Canvas.MainWindow.MoveWindow(new WindowInteropHelper(mainWin).Handle, 0, 0,
2025-07-28 14:40:44 +08:00
Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height, true);
Ink_Canvas.MainWindow.ShowNewMessage($"已强制全屏化:{Screen.PrimaryScreen.Bounds.Width}x{Screen.PrimaryScreen.Bounds.Height}(缩放比例为{Screen.PrimaryScreen.Bounds.Width / SystemParameters.PrimaryScreenWidth}x{Screen.PrimaryScreen.Bounds.Height / SystemParameters.PrimaryScreenHeight}");
2025-05-25 09:29:48 +08:00
}
}
private void FoldFloatingBarTrayIconMenuItem_Clicked(object sender, RoutedEventArgs e)
{
2025-07-28 14:40:44 +08:00
var mainWin = (MainWindow)Current.MainWindow;
2025-05-25 09:29:48 +08:00
if (mainWin.IsLoaded)
2025-08-03 16:46:33 +08:00
if (mainWin.isFloatingBarFolded) mainWin.UnFoldFloatingBar_MouseUp(new object(), null);
else mainWin.FoldFloatingBar_MouseUp(new object(), null);
2025-05-25 09:29:48 +08:00
}
private void ResetFloatingBarPositionTrayIconMenuItem_Clicked(object sender, RoutedEventArgs e)
{
2025-07-28 14:40:44 +08:00
var mainWin = (MainWindow)Current.MainWindow;
2025-08-03 16:46:33 +08:00
if (mainWin.IsLoaded)
{
2025-05-25 09:29:48 +08:00
var isInPPTPresentationMode = false;
2025-08-03 16:46:33 +08:00
Dispatcher.Invoke(() =>
{
2025-05-25 09:29:48 +08:00
isInPPTPresentationMode = mainWin.BtnPPTSlideShowEnd.Visibility == Visibility.Visible;
});
2025-08-03 16:46:33 +08:00
if (!mainWin.isFloatingBarFolded)
{
2025-05-25 09:29:48 +08:00
if (!isInPPTPresentationMode) mainWin.PureViewboxFloatingBarMarginAnimationInDesktopMode();
else mainWin.PureViewboxFloatingBarMarginAnimationInPPTMode();
}
}
}
2025-08-03 16:46:33 +08:00
private void HideICCMainWindowTrayIconMenuItem_Checked(object sender, RoutedEventArgs e)
{
2025-05-25 09:29:48 +08:00
var mi = (MenuItem)sender;
2025-07-28 14:40:44 +08:00
var mainWin = (MainWindow)Current.MainWindow;
2025-08-03 16:46:33 +08:00
if (mainWin.IsLoaded)
{
2025-05-25 09:29:48 +08:00
mainWin.Hide();
2025-07-28 14:40:44 +08:00
var s = ((TaskbarIcon)Current.Resources["TaskbarTrayIcon"]).ContextMenu;
2025-05-25 09:29:48 +08:00
var ResetFloatingBarPositionTrayIconMenuItem = (MenuItem)s.Items[s.Items.Count - 4];
var FoldFloatingBarTrayIconMenuItem = (MenuItem)s.Items[s.Items.Count - 5];
var ForceFullScreenTrayIconMenuItem = (MenuItem)s.Items[s.Items.Count - 6];
ResetFloatingBarPositionTrayIconMenuItem.IsEnabled = false;
FoldFloatingBarTrayIconMenuItem.IsEnabled = false;
ForceFullScreenTrayIconMenuItem.IsEnabled = false;
ResetFloatingBarPositionTrayIconMenuItem.Opacity = 0.5;
FoldFloatingBarTrayIconMenuItem.Opacity = 0.5;
ForceFullScreenTrayIconMenuItem.Opacity = 0.5;
2025-08-03 16:46:33 +08:00
}
else
{
2025-05-25 09:29:48 +08:00
mi.IsChecked = false;
}
2025-08-03 16:46:33 +08:00
2025-05-25 09:29:48 +08:00
}
2025-08-03 16:46:33 +08:00
private void HideICCMainWindowTrayIconMenuItem_UnChecked(object sender, RoutedEventArgs e)
{
2025-05-25 09:29:48 +08:00
var mi = (MenuItem)sender;
2025-07-28 14:40:44 +08:00
var mainWin = (MainWindow)Current.MainWindow;
2025-08-03 16:46:33 +08:00
if (mainWin.IsLoaded)
{
2025-05-25 09:29:48 +08:00
mainWin.Show();
2025-07-28 14:40:44 +08:00
var s = ((TaskbarIcon)Current.Resources["TaskbarTrayIcon"]).ContextMenu;
2025-05-25 09:29:48 +08:00
var ResetFloatingBarPositionTrayIconMenuItem = (MenuItem)s.Items[s.Items.Count - 4];
var FoldFloatingBarTrayIconMenuItem = (MenuItem)s.Items[s.Items.Count - 5];
var ForceFullScreenTrayIconMenuItem = (MenuItem)s.Items[s.Items.Count - 6];
ResetFloatingBarPositionTrayIconMenuItem.IsEnabled = true;
FoldFloatingBarTrayIconMenuItem.IsEnabled = true;
ForceFullScreenTrayIconMenuItem.IsEnabled = true;
ResetFloatingBarPositionTrayIconMenuItem.Opacity = 1;
FoldFloatingBarTrayIconMenuItem.Opacity = 1;
ForceFullScreenTrayIconMenuItem.Opacity = 1;
2025-08-03 16:46:33 +08:00
}
else
{
2025-05-25 09:29:48 +08:00
mi.IsChecked = false;
}
}
}
}