From 758a3d3f99bae8606af40fc5d65c0afd027875bf Mon Sep 17 00:00:00 2001 From: unknown <2564608840@qq.com> Date: Sat, 19 Jul 2025 17:27:27 +0800 Subject: [PATCH] improve:issue #79 --- .../MainWindow_cs/MW_Save&OpenStrokes.cs | 64 ++++++++++++------- 1 file changed, 40 insertions(+), 24 deletions(-) diff --git a/Ink Canvas/MainWindow_cs/MW_Save&OpenStrokes.cs b/Ink Canvas/MainWindow_cs/MW_Save&OpenStrokes.cs index 5d5c22a7..7d3e2e57 100644 --- a/Ink Canvas/MainWindow_cs/MW_Save&OpenStrokes.cs +++ b/Ink Canvas/MainWindow_cs/MW_Save&OpenStrokes.cs @@ -364,16 +364,22 @@ namespace Ink_Canvas { // 检查当前是否处于PPT模式 bool isCurrentlyInPPTMode = BtnPPTSlideShowEnd.Visibility == Visibility.Visible && pptApplication != null; - // 根据当前模式和保存模式决定恢复策略 + // 检查当前是否处于白板模式 + bool isCurrentlyInWhiteboardMode = currentMode != 0; + + // 严格模式隔离:只在对应模式下恢复对应墨迹 if (isPPTMode && isCurrentlyInPPTMode) { - // PPT模式下恢复PPT墨迹 + // 只在PPT放映模式下恢复PPT墨迹 RestorePPTStrokesFromZip(tempDir, metadata); - } else if (isWhiteboardMode) { - // 白板模式下恢复白板墨迹 + } else if (isWhiteboardMode && isCurrentlyInWhiteboardMode) { + // 只在白板模式下恢复白板墨迹 RestoreWhiteboardStrokesFromZip(tempDir, metadata); } else { - // 其他情况只恢复白板墨迹 - RestoreWhiteboardStrokesFromZip(tempDir, metadata); + // 模式不匹配时,显示提示信息 + string savedMode = isPPTMode ? "PPT放映" : (isWhiteboardMode ? "白板" : "未知"); + string currentMode = isCurrentlyInPPTMode ? "PPT放映" : (isCurrentlyInWhiteboardMode ? "白板" : "桌面"); + ShowNotification($"墨迹保存模式({savedMode})与当前模式({currentMode})不匹配,无法恢复墨迹"); + LogHelper.WriteLogToFile($"模式不匹配:保存模式={savedMode},当前模式={currentMode}", LogHelper.LogType.Warning); } ShowNotification($"成功打开ICC压缩包,共{(metadata.ContainsKey("总页数") ? metadata["总页数"] : "0")}页"); @@ -421,6 +427,11 @@ namespace Ink_Canvas { /// private void RestorePPTStrokesFromZip(string tempDir, Dictionary metadata) { try { + // 确保当前处于PPT放映模式 + if (BtnPPTSlideShowEnd.Visibility != Visibility.Visible || pptApplication == null) { + throw new InvalidOperationException("当前不在PPT放映模式,无法恢复PPT墨迹"); + } + // 清空当前墨迹 ClearStrokes(true); timeMachine.ClearStrokeHistory(); @@ -448,7 +459,7 @@ namespace Ink_Canvas { } // 恢复当前页面的墨迹 - if (pptApplication != null && pptApplication.SlideShowWindows.Count > 0) { + if (pptApplication.SlideShowWindows.Count > 0) { int currentSlide = pptApplication.SlideShowWindows[1].View.CurrentShowPosition; if (memoryStreams[currentSlide] != null && memoryStreams[currentSlide].Length > 0) { memoryStreams[currentSlide].Position = 0; @@ -470,6 +481,11 @@ namespace Ink_Canvas { /// private void RestoreWhiteboardStrokesFromZip(string tempDir, Dictionary metadata) { try { + // 确保当前处于白板模式 + if (currentMode == 0) { + throw new InvalidOperationException("当前不在白板模式,无法恢复白板墨迹"); + } + // 清空当前墨迹 ClearStrokes(true); timeMachine.ClearStrokeHistory(); @@ -525,27 +541,27 @@ namespace Ink_Canvas { /// 打开单个墨迹文件 /// private void OpenSingleStrokeFile(string filePath) { - var fileStreamHasNoStroke = false; + var fileStreamHasNoStroke = false; using (var fs = new FileStream(filePath, FileMode.Open, FileAccess.Read)) { - var strokes = new StrokeCollection(fs); - fileStreamHasNoStroke = strokes.Count == 0; - if (!fileStreamHasNoStroke) { - ClearStrokes(true); - timeMachine.ClearStrokeHistory(); - inkCanvas.Strokes.Add(strokes); - LogHelper.NewLog($"Strokes Insert: Strokes Count: {inkCanvas.Strokes.Count.ToString()}"); + var strokes = new StrokeCollection(fs); + fileStreamHasNoStroke = strokes.Count == 0; + if (!fileStreamHasNoStroke) { + ClearStrokes(true); + timeMachine.ClearStrokeHistory(); + inkCanvas.Strokes.Add(strokes); + LogHelper.NewLog($"Strokes Insert: Strokes Count: {inkCanvas.Strokes.Count.ToString()}"); + } } - } - if (fileStreamHasNoStroke) + if (fileStreamHasNoStroke) using (var ms = new MemoryStream(File.ReadAllBytes(filePath))) { - ms.Seek(0, SeekOrigin.Begin); - var strokes = new StrokeCollection(ms); - ClearStrokes(true); - timeMachine.ClearStrokeHistory(); - inkCanvas.Strokes.Add(strokes); - LogHelper.NewLog($"Strokes Insert (2): Strokes Count: {strokes.Count.ToString()}"); - } + ms.Seek(0, SeekOrigin.Begin); + var strokes = new StrokeCollection(ms); + ClearStrokes(true); + timeMachine.ClearStrokeHistory(); + inkCanvas.Strokes.Add(strokes); + LogHelper.NewLog($"Strokes Insert (2): Strokes Count: {strokes.Count.ToString()}"); + } } } }