imporve:PPT墨迹保存
This commit is contained in:
@@ -174,14 +174,14 @@ namespace Ink_Canvas.Helpers
|
||||
var manager = GetCurrentManager();
|
||||
if (manager != null)
|
||||
{
|
||||
// 先创建备份
|
||||
// 保存到管理器
|
||||
manager.SaveCurrentSlideStrokes(slideIndex, strokes);
|
||||
|
||||
// 只有在保存成功后才创建备份
|
||||
if (!string.IsNullOrEmpty(_currentActivePresentationId))
|
||||
{
|
||||
CreateStrokeBackup(_currentActivePresentationId, slideIndex, strokes);
|
||||
}
|
||||
|
||||
// 保存到管理器
|
||||
manager.SaveCurrentSlideStrokes(slideIndex, strokes);
|
||||
|
||||
// 检查是否需要执行定期备份
|
||||
CheckAndPerformBackup();
|
||||
|
||||
@@ -473,6 +473,13 @@ namespace Ink_Canvas.Helpers
|
||||
return true;
|
||||
}
|
||||
|
||||
// 如果当前页面不是锁定页面,但锁定时间很短(小于50ms),允许写入
|
||||
// 这样可以确保旧页面的墨迹能够及时保存
|
||||
if (DateTime.Now - (_inkLockUntil.AddMilliseconds(-InkLockMilliseconds)) < TimeSpan.FromMilliseconds(50))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
// 只有在快速切换且页面不同时才锁定
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -850,10 +850,24 @@ namespace Ink_Canvas.Helpers
|
||||
// 如果在放映模式,获取放映窗口的演示文稿
|
||||
if (IsInSlideShow && PPTApplication.SlideShowWindows.Count > 0)
|
||||
{
|
||||
var slideShowWindow = PPTApplication.SlideShowWindows[1];
|
||||
if (slideShowWindow?.View != null)
|
||||
try
|
||||
{
|
||||
return (Presentation)slideShowWindow.View.Slide.Parent;
|
||||
var slideShowWindow = PPTApplication.SlideShowWindows[1];
|
||||
if (slideShowWindow?.View != null)
|
||||
{
|
||||
return (Presentation)slideShowWindow.View.Slide.Parent;
|
||||
}
|
||||
}
|
||||
catch (COMException comEx)
|
||||
{
|
||||
var hr = (uint)comEx.HResult;
|
||||
if (hr == 0x80048240) // Integer out of range
|
||||
{
|
||||
LogHelper.WriteLogToFile($"验证PPT放映窗口失败: {comEx.Message}", LogHelper.LogType.Warning);
|
||||
// 放映窗口已不存在,返回null
|
||||
return null;
|
||||
}
|
||||
throw; // 重新抛出其他COM异常
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1121,14 +1121,48 @@ namespace Ink_Canvas
|
||||
{
|
||||
try
|
||||
{
|
||||
// 检查PPT连接状态
|
||||
if (_pptManager?.IsConnected != true || _pptManager?.IsInSlideShow != true)
|
||||
{
|
||||
LogHelper.WriteLogToFile($"PPT未连接或未在放映状态,跳过页面切换: IsConnected={_pptManager?.IsConnected}, IsInSlideShow={_pptManager?.IsInSlideShow}", LogHelper.LogType.Warning);
|
||||
return;
|
||||
}
|
||||
|
||||
// 获取当前页面索引
|
||||
var currentSlideIndex = _pptManager?.GetCurrentSlideNumber() ?? 0;
|
||||
|
||||
LogHelper.WriteLogToFile($"开始切换页面墨迹: 从第{currentSlideIndex}页到第{newSlideIndex}页", LogHelper.LogType.Trace);
|
||||
|
||||
// 验证页面索引的有效性
|
||||
if (newSlideIndex <= 0)
|
||||
{
|
||||
LogHelper.WriteLogToFile($"无效的新页面索引: {newSlideIndex},跳过页面切换", LogHelper.LogType.Warning);
|
||||
return;
|
||||
}
|
||||
|
||||
// 如果有当前墨迹且不是第一次切换,先保存到当前页面
|
||||
if (inkCanvas.Strokes.Count > 0 && currentSlideIndex > 0 && currentSlideIndex != newSlideIndex)
|
||||
{
|
||||
_multiPPTInkManager?.SaveCurrentSlideStrokes(currentSlideIndex, inkCanvas.Strokes);
|
||||
LogHelper.WriteLogToFile($"切换前保存第{currentSlideIndex}页墨迹,墨迹数量: {inkCanvas.Strokes.Count}", LogHelper.LogType.Trace);
|
||||
// 检查是否可以写入墨迹
|
||||
bool canWrite = _multiPPTInkManager?.CanWriteInk(currentSlideIndex) == true;
|
||||
LogHelper.WriteLogToFile($"第{currentSlideIndex}页墨迹写入权限: {canWrite}", LogHelper.LogType.Trace);
|
||||
|
||||
if (canWrite)
|
||||
{
|
||||
// 正常保存
|
||||
_multiPPTInkManager?.SaveCurrentSlideStrokes(currentSlideIndex, inkCanvas.Strokes);
|
||||
LogHelper.WriteLogToFile($"正常保存第{currentSlideIndex}页墨迹,墨迹数量: {inkCanvas.Strokes.Count}", LogHelper.LogType.Trace);
|
||||
}
|
||||
else
|
||||
{
|
||||
// 墨迹被锁定,跳过保存以避免墨迹错页
|
||||
LogHelper.WriteLogToFile($"第{currentSlideIndex}页墨迹被锁定,跳过保存以避免墨迹错页", LogHelper.LogType.Warning);
|
||||
}
|
||||
}
|
||||
else if (inkCanvas.Strokes.Count > 0 && currentSlideIndex <= 0)
|
||||
{
|
||||
// 无法获取当前页面索引时,不保存墨迹,直接清空
|
||||
LogHelper.WriteLogToFile($"无法获取当前页面索引({currentSlideIndex}),跳过墨迹保存", LogHelper.LogType.Warning);
|
||||
}
|
||||
|
||||
// 切换到新页面并加载墨迹
|
||||
@@ -1137,10 +1171,10 @@ namespace Ink_Canvas
|
||||
{
|
||||
inkCanvas.Strokes.Clear();
|
||||
inkCanvas.Strokes.Add(newStrokes);
|
||||
LogHelper.WriteLogToFile($"已切换到第{newSlideIndex}页,加载墨迹数量: {newStrokes.Count}", LogHelper.LogType.Trace);
|
||||
}
|
||||
|
||||
// 设置墨迹锁定
|
||||
_multiPPTInkManager?.LockInkForSlide(newSlideIndex);
|
||||
// 注意:LockInkForSlide已经在SwitchToSlide中调用,这里不需要重复调用
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user