From 70735943c304ae424435d4c2fa7d641b2d56a447 Mon Sep 17 00:00:00 2001
From: CJKmkp <2564608840@qq.com>
Date: Sat, 23 Aug 2025 19:43:09 +0800
Subject: [PATCH] =?UTF-8?q?add:=E9=95=BF=E6=8C=89=E7=BF=BB=E9=A1=B5?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
Ink Canvas/Helpers/PPTUIManager.cs | 1 +
Ink Canvas/MainWindow.xaml | 13 +++
Ink Canvas/MainWindow_cs/MW_PPT.cs | 94 +++++++++++++++++++
Ink Canvas/MainWindow_cs/MW_Settings.cs | 9 ++
Ink Canvas/MainWindow_cs/MW_SettingsToLoad.cs | 3 +
Ink Canvas/Resources/Settings.cs | 3 +
6 files changed, 123 insertions(+)
diff --git a/Ink Canvas/Helpers/PPTUIManager.cs b/Ink Canvas/Helpers/PPTUIManager.cs
index dfb4d353..6fe95e2c 100644
--- a/Ink Canvas/Helpers/PPTUIManager.cs
+++ b/Ink Canvas/Helpers/PPTUIManager.cs
@@ -22,6 +22,7 @@ namespace Ink_Canvas.Helpers
public int PPTLBButtonPosition { get; set; } = 0;
public int PPTRBButtonPosition { get; set; } = 0;
public bool EnablePPTButtonPageClickable { get; set; } = true;
+ public bool EnablePPTButtonLongPressPageTurn { get; set; } = true;
#endregion
#region Private Fields
diff --git a/Ink Canvas/MainWindow.xaml b/Ink Canvas/MainWindow.xaml
index d6893bd0..9597d615 100644
--- a/Ink Canvas/MainWindow.xaml
+++ b/Ink Canvas/MainWindow.xaml
@@ -1843,6 +1843,19 @@
+
+
+
+
+
diff --git a/Ink Canvas/MainWindow_cs/MW_PPT.cs b/Ink Canvas/MainWindow_cs/MW_PPT.cs
index 3a5cd22d..4834a155 100644
--- a/Ink Canvas/MainWindow_cs/MW_PPT.cs
+++ b/Ink Canvas/MainWindow_cs/MW_PPT.cs
@@ -11,6 +11,7 @@ using System.Threading;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Media;
+using System.Windows.Threading;
using Application = System.Windows.Application;
using File = System.IO.File;
using MessageBox = System.Windows.MessageBox;
@@ -80,6 +81,13 @@ namespace Ink_Canvas
private bool isPresentationHaveBlackSpace;
private string pptName;
private bool _isPptClickingBtnTurned;
+
+ // 长按翻页相关字段
+ private DispatcherTimer _longPressTimer;
+ private bool _isLongPressActive = false;
+ private bool _isLongPressNext = true; // true为下一页,false为上一页
+ private const int LongPressDelay = 500; // 长按延迟时间(毫秒)
+ private const int LongPressInterval = 200; // 长按翻页间隔(毫秒)
#endregion
#region PPT Managers
@@ -98,6 +106,9 @@ namespace Ink_Canvas
{
try
{
+ // 初始化长按定时器
+ InitializeLongPressTimer();
+
// 初始化PPT管理器
_pptManager = new PPTManager();
_pptManager.IsSupportWPS = Settings.PowerPointSettings.IsSupportWPS;
@@ -127,6 +138,7 @@ namespace Ink_Canvas
_pptUIManager.PPTLBButtonPosition = Settings.PowerPointSettings.PPTLBButtonPosition;
_pptUIManager.PPTRBButtonPosition = Settings.PowerPointSettings.PPTRBButtonPosition;
_pptUIManager.EnablePPTButtonPageClickable = Settings.PowerPointSettings.EnablePPTButtonPageClickable;
+ _pptUIManager.EnablePPTButtonLongPressPageTurn = Settings.PowerPointSettings.EnablePPTButtonLongPressPageTurn;
LogHelper.WriteLogToFile("PPT管理器初始化完成", LogHelper.LogType.Event);
}
@@ -157,6 +169,8 @@ namespace Ink_Canvas
{
_pptManager?.Dispose();
_pptInkManager?.Dispose();
+ _longPressTimer?.Stop();
+ _longPressTimer = null;
_pptManager = null;
_pptInkManager = null;
_pptUIManager = null;
@@ -167,6 +181,60 @@ namespace Ink_Canvas
LogHelper.WriteLogToFile($"释放PPT管理器失败: {ex}", LogHelper.LogType.Error);
}
}
+
+ ///
+ /// 初始化长按定时器
+ ///
+ private void InitializeLongPressTimer()
+ {
+ _longPressTimer = new DispatcherTimer();
+ _longPressTimer.Interval = TimeSpan.FromMilliseconds(LongPressDelay);
+ _longPressTimer.Tick += OnLongPressTimerTick;
+ }
+
+ ///
+ /// 启动长按检测
+ ///
+ /// 触发事件的控件
+ /// 是否为下一页按钮
+ private void StartLongPressDetection(object sender, bool isNext)
+ {
+ if (!Settings.PowerPointSettings.EnablePPTButtonLongPressPageTurn) return;
+
+ _isLongPressNext = isNext;
+ _isLongPressActive = false;
+ _longPressTimer?.Start();
+ }
+
+ ///
+ /// 停止长按检测
+ ///
+ private void StopLongPressDetection()
+ {
+ _longPressTimer?.Stop();
+ _isLongPressActive = false;
+ }
+
+ ///
+ /// 长按定时器事件处理
+ ///
+ private void OnLongPressTimerTick(object sender, EventArgs e)
+ {
+ if (!Settings.PowerPointSettings.EnablePPTButtonLongPressPageTurn) return;
+
+ _isLongPressActive = true;
+ _longPressTimer.Interval = TimeSpan.FromMilliseconds(LongPressInterval);
+
+ // 执行翻页
+ if (_isLongPressNext)
+ {
+ BtnPPTSlidesDown_Click(BtnPPTSlidesDown, null);
+ }
+ else
+ {
+ BtnPPTSlidesUp_Click(BtnPPTSlidesUp, null);
+ }
+ }
#endregion
#region New PPT Event Handlers
@@ -1047,6 +1115,12 @@ namespace Ink_Canvas
{
PPTRBPreviousButtonFeedbackBorder.Opacity = 0.15;
}
+
+ // 启动长按检测
+ if (Settings.PowerPointSettings.EnablePPTButtonLongPressPageTurn)
+ {
+ StartLongPressDetection(sender, false);
+ }
}
private void GridPPTControlPrevious_MouseLeave(object sender, MouseEventArgs e)
{
@@ -1067,6 +1141,9 @@ namespace Ink_Canvas
{
PPTRBPreviousButtonFeedbackBorder.Opacity = 0;
}
+
+ // 停止长按检测
+ StopLongPressDetection();
}
private void GridPPTControlPrevious_MouseUp(object sender, MouseButtonEventArgs e)
{
@@ -1087,6 +1164,10 @@ namespace Ink_Canvas
{
PPTRBPreviousButtonFeedbackBorder.Opacity = 0;
}
+
+ // 停止长按检测
+ StopLongPressDetection();
+
BtnPPTSlidesUp_Click(BtnPPTSlidesUp, null);
}
@@ -1110,6 +1191,12 @@ namespace Ink_Canvas
{
PPTRBNextButtonFeedbackBorder.Opacity = 0.15;
}
+
+ // 启动长按检测
+ if (Settings.PowerPointSettings.EnablePPTButtonLongPressPageTurn)
+ {
+ StartLongPressDetection(sender, true);
+ }
}
private void GridPPTControlNext_MouseLeave(object sender, MouseEventArgs e)
{
@@ -1130,6 +1217,9 @@ namespace Ink_Canvas
{
PPTRBNextButtonFeedbackBorder.Opacity = 0;
}
+
+ // 停止长按检测
+ StopLongPressDetection();
}
private void GridPPTControlNext_MouseUp(object sender, MouseButtonEventArgs e)
{
@@ -1150,6 +1240,10 @@ namespace Ink_Canvas
{
PPTRBNextButtonFeedbackBorder.Opacity = 0;
}
+
+ // 停止长按检测
+ StopLongPressDetection();
+
BtnPPTSlidesDown_Click(BtnPPTSlidesDown, null);
}
diff --git a/Ink Canvas/MainWindow_cs/MW_Settings.cs b/Ink Canvas/MainWindow_cs/MW_Settings.cs
index d3a695fc..011c9842 100644
--- a/Ink Canvas/MainWindow_cs/MW_Settings.cs
+++ b/Ink Canvas/MainWindow_cs/MW_Settings.cs
@@ -511,6 +511,13 @@ namespace Ink_Canvas
SaveSettingsToFile();
}
+ private void ToggleSwitchEnablePPTButtonLongPressPageTurn_OnToggled(object sender, RoutedEventArgs e)
+ {
+ if (!isLoaded) return;
+ Settings.PowerPointSettings.EnablePPTButtonLongPressPageTurn = ToggleSwitchEnablePPTButtonLongPressPageTurn.IsOn;
+ SaveSettingsToFile();
+ }
+
private void CheckboxEnableLBPPTButton_IsCheckChanged(object sender, RoutedEventArgs e)
{
if (!isLoaded) return;
@@ -883,6 +890,8 @@ namespace Ink_Canvas
_pptUIManager.PPTRSButtonPosition = Settings.PowerPointSettings.PPTRSButtonPosition;
_pptUIManager.PPTLBButtonPosition = Settings.PowerPointSettings.PPTLBButtonPosition;
_pptUIManager.PPTRBButtonPosition = Settings.PowerPointSettings.PPTRBButtonPosition;
+ _pptUIManager.EnablePPTButtonPageClickable = Settings.PowerPointSettings.EnablePPTButtonPageClickable;
+ _pptUIManager.EnablePPTButtonLongPressPageTurn = Settings.PowerPointSettings.EnablePPTButtonLongPressPageTurn;
_pptUIManager.UpdateNavigationPanelsVisibility();
_pptUIManager.UpdateNavigationButtonStyles();
}
diff --git a/Ink Canvas/MainWindow_cs/MW_SettingsToLoad.cs b/Ink Canvas/MainWindow_cs/MW_SettingsToLoad.cs
index b350d73c..454f45a1 100644
--- a/Ink Canvas/MainWindow_cs/MW_SettingsToLoad.cs
+++ b/Ink Canvas/MainWindow_cs/MW_SettingsToLoad.cs
@@ -367,6 +367,9 @@ namespace Ink_Canvas
ToggleSwitchEnablePPTButtonPageClickable.IsOn =
Settings.PowerPointSettings.EnablePPTButtonPageClickable;
+ ToggleSwitchEnablePPTButtonLongPressPageTurn.IsOn =
+ Settings.PowerPointSettings.EnablePPTButtonLongPressPageTurn;
+
var dops = Settings.PowerPointSettings.PPTButtonsDisplayOption.ToString();
var dopsc = dops.ToCharArray();
if ((dopsc[0] == '1' || dopsc[0] == '2') && (dopsc[1] == '1' || dopsc[1] == '2') &&
diff --git a/Ink Canvas/Resources/Settings.cs b/Ink Canvas/Resources/Settings.cs
index d5c7b5a0..a80971c5 100644
--- a/Ink Canvas/Resources/Settings.cs
+++ b/Ink Canvas/Resources/Settings.cs
@@ -262,6 +262,9 @@ namespace Ink_Canvas
[JsonProperty("enablePPTButtonPageClickable")]
public bool EnablePPTButtonPageClickable { get; set; } = true;
+ [JsonProperty("enablePPTButtonLongPressPageTurn")]
+ public bool EnablePPTButtonLongPressPageTurn { get; set; } = true;
+
// -- new --
[JsonProperty("powerPointSupport")]