Skip to content

Commit 504ca5a

Browse files
authoredAug 31, 2024
修复议题 WXRIW#128 (WXRIW#144)
1 parent ebd8430 commit 504ca5a

File tree

2 files changed

+62
-37
lines changed

2 files changed

+62
-37
lines changed
 

‎Ink Canvas/MainWindow.xaml.cs

+61-36
Original file line numberDiff line numberDiff line change
@@ -2365,6 +2365,8 @@ private void ToggleSwitchSupportWPS_Toggled(object sender, RoutedEventArgs e)
23652365

23662366
public static bool IsShowingRestoreHiddenSlidesWindow = false;
23672367

2368+
public static bool IsNotifyPreviousPageWindowShown = false;
2369+
23682370
private void TimerCheckPPT_Elapsed(object sender, ElapsedEventArgs e)
23692371
{
23702372
if (IsShowingRestoreHiddenSlidesWindow) return;
@@ -2420,30 +2422,31 @@ private void TimerCheckPPT_Elapsed(object sender, ElapsedEventArgs e)
24202422
// 跳转到上次播放页
24212423
if (Settings.PowerPointSettings.IsNotifyPreviousPage)
24222424
Application.Current.Dispatcher.BeginInvoke(() =>
2423-
{
2424-
string defaultFolderPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) +
2425-
@"\Ink Canvas Strokes\Auto Saved\Presentations\";
2426-
string folderPath = defaultFolderPath + presentation.Name + "_" + presentation.Slides.Count;
2427-
if (File.Exists(folderPath + "/Position"))
24282425
{
2429-
if (int.TryParse(File.ReadAllText(folderPath + "/Position"), out var page))
2426+
string defaultFolderPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) +
2427+
@"\Ink Canvas Strokes\Auto Saved\Presentations\";
2428+
string folderPath = defaultFolderPath + presentation.Name + "_" + presentation.Slides.Count;
2429+
if (File.Exists(folderPath + "/Position") & !IsNotifyPreviousPageWindowShown) //判断是否已存在NotifyPreviousPage窗口
24302430
{
2431-
if (page <= 0) return;
2432-
new YesOrNoNotificationWindow($"上次播放到了第 {page} 页, 是否立即跳转", () =>
2431+
if (int.TryParse(File.ReadAllText(folderPath + "/Position"), out var page))
24332432
{
2434-
if (pptApplication.SlideShowWindows.Count >= 1)
2433+
IsNotifyPreviousPageWindowShown= true;
2434+
if (page <= 0) return;
2435+
new YesOrNoNotificationWindow($"上次播放到了第 {page} 页, 是否立即跳转", () =>
24352436
{
2436-
// 如果已经播放了的话, 跳转
2437-
presentation.SlideShowWindow.View.GotoSlide(page);
2438-
}
2439-
else
2440-
{
2441-
presentation.Windows[1].View.GotoSlide(page);
2442-
}
2443-
}).ShowDialog();
2437+
if (pptApplication.SlideShowWindows.Count >= 1)
2438+
{
2439+
// 如果已经播放了的话, 跳转
2440+
presentation.SlideShowWindow.View.GotoSlide(page);
2441+
}
2442+
else
2443+
{
2444+
presentation.Windows[1].View.GotoSlide(page);
2445+
}
2446+
}).ShowDialog();
2447+
}
24442448
}
2445-
}
2446-
}, DispatcherPriority.Normal);
2449+
}, DispatcherPriority.Normal);
24472450

24482451

24492452
//检查是否有隐藏幻灯片
@@ -2464,7 +2467,7 @@ private void TimerCheckPPT_Elapsed(object sender, ElapsedEventArgs e)
24642467
if (isHaveHiddenSlide && !IsShowingRestoreHiddenSlidesWindow)
24652468
{
24662469
IsShowingRestoreHiddenSlidesWindow = true;
2467-
new YesOrNoNotificationWindow("检测到此演示文档中包含隐藏的幻灯片,是否取消隐藏?",
2470+
new YesOrNoNotificationWindow("检测到此演示文稿包含隐藏的幻灯片,是否取消隐藏?",
24682471
() =>
24692472
{
24702473
foreach (Slide slide in slides)
@@ -2512,7 +2515,7 @@ private void PptApplication_PresentationClose(Presentation Pres)
25122515
timerCheckPPT.Start();
25132516
Application.Current.Dispatcher.Invoke(() =>
25142517
{
2515-
BtnPPTSlideShow.Visibility = Visibility.Collapsed;
2518+
//BtnPPTSlideShow.Visibility = Visibility.Collapsed;
25162519
BtnPPTSlideShowEnd.Visibility = Visibility.Collapsed;
25172520
});
25182521
}
@@ -2521,6 +2524,7 @@ private void PptApplication_PresentationClose(Presentation Pres)
25212524

25222525

25232526
private string pptName = null;
2527+
int currentShowPosition = -1;
25242528
//bool isButtonBackgroundTransparent = true; //此变量仅用于保存用于幻灯片放映时的优化
25252529
private void PptApplication_SlideShowBegin(SlideShowWindow Wn)
25262530
{
@@ -2581,21 +2585,24 @@ private void PptApplication_SlideShowBegin(SlideShowWindow Wn)
25812585
int count = 0;
25822586
foreach (FileInfo file in files)
25832587
{
2584-
int i = -1;
2585-
try
2586-
{
2587-
i = int.Parse(System.IO.Path.GetFileNameWithoutExtension(file.Name));
2588-
//var fs = new FileStream(file.FullName, FileMode.Open, FileAccess.Read);
2589-
//MemoryStream ms = new MemoryStream(File.ReadAllBytes(file.FullName));
2590-
//new StrokeCollection(fs).Save(ms);
2591-
//ms.Position = 0;
2592-
memoryStreams[i] = new MemoryStream(File.ReadAllBytes(file.FullName));
2593-
memoryStreams[i].Position = 0;
2594-
count++;
2595-
}
2596-
catch (Exception ex)
2588+
if (file.Name != "Position")
25972589
{
2598-
LogHelper.WriteLogToFile(string.Format("Failed to load strokes on Slide {0}\n{1}", i, ex.ToString()), LogHelper.LogType.Error);
2590+
int i = -1;
2591+
try
2592+
{
2593+
i = int.Parse(System.IO.Path.GetFileNameWithoutExtension(file.Name));
2594+
//var fs = new FileStream(file.FullName, FileMode.Open, FileAccess.Read);
2595+
//MemoryStream ms = new MemoryStream(File.ReadAllBytes(file.FullName));
2596+
//new StrokeCollection(fs).Save(ms);
2597+
//ms.Position = 0;
2598+
memoryStreams[i] = new MemoryStream(File.ReadAllBytes(file.FullName));
2599+
memoryStreams[i].Position = 0;
2600+
count++;
2601+
}
2602+
catch (Exception ex)
2603+
{
2604+
LogHelper.WriteLogToFile(string.Format("Failed to load strokes on Slide {0}\n{1}", i, ex.ToString()), LogHelper.LogType.Error);
2605+
}
25992606
}
26002607
}
26012608
LogHelper.WriteLogToFile(string.Format("Loaded {0} saved strokes", count.ToString()));
@@ -2686,6 +2693,7 @@ private void PptApplication_SlideShowBegin(SlideShowWindow Wn)
26862693
bool isEnteredSlideShowEndEvent = false; //防止重复调用本函数导致墨迹保存失效
26872694
private void PptApplication_SlideShowEnd(Presentation Pres)
26882695
{
2696+
IsNotifyPreviousPageWindowShown = false;
26892697
LogHelper.WriteLogToFile(string.Format("PowerPoint Slide Show End"), LogHelper.LogType.Event);
26902698
if (isEnteredSlideShowEndEvent)
26912699
{
@@ -2701,7 +2709,22 @@ private void PptApplication_SlideShowEnd(Presentation Pres)
27012709
{
27022710
Directory.CreateDirectory(folderPath);
27032711
}
2704-
File.WriteAllText(folderPath + "/Position", previousSlideID.ToString());
2712+
try
2713+
{
2714+
File.WriteAllText(folderPath + "/Position", previousSlideID.ToString());
2715+
}
2716+
catch { }
2717+
Application.Current.Dispatcher.Invoke(() =>
2718+
{
2719+
try
2720+
{
2721+
MemoryStream ms = new MemoryStream();
2722+
inkCanvas.Strokes.Save(ms);
2723+
ms.Position = 0;
2724+
memoryStreams[currentShowPosition] = ms;
2725+
}
2726+
catch { }
2727+
});
27052728
for (int i = 1; i <= Pres.Slides.Count; i++)
27062729
{
27072730
if (memoryStreams[i] != null)
@@ -2818,6 +2841,7 @@ private void PptApplication_SlideShowNextSlide(SlideShowWindow Wn)
28182841
{
28192842
inkCanvas.Strokes.Add(new StrokeCollection(memoryStreams[Wn.View.CurrentShowPosition]));
28202843
}
2844+
currentShowPosition = Wn.View.CurrentShowPosition;
28212845
}
28222846
catch
28232847
{ }
@@ -2923,6 +2947,7 @@ private void BtnPPTSlideShowEnd_Click(object sender, RoutedEventArgs e)
29232947
ms.Position = 0;
29242948
memoryStreams[pptApplication.SlideShowWindows[1].View.CurrentShowPosition] = ms;
29252949
timeMachine.ClearStrokeHistory();
2950+
IsNotifyPreviousPageWindowShown = false;
29262951
}
29272952
catch { }
29282953
});

‎Ink Canvas/YesOrNoNotificationWindow.xaml

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
xmlns:local="clr-namespace:Ink_Canvas" xmlns:ui="http://schemas.inkore.net/lib/ui/wpf/modern"
77
mc:Ignorable="d" Topmost="True" WindowStartupLocation="CenterScreen" ui:WindowHelper.UseModernWindowStyle="True"
88
ResizeMode="NoResize" Closed="Window_Closed" ui:ThemeManager.RequestedTheme="Light"
9-
Title="演示文档设置 - Ink Canvas 画板" Height="160" Width="450" FontFamily="Microsoft YaHei UI">
9+
Title="提示 - Ink Canvas 画板" Height="160" Width="450" FontFamily="Microsoft YaHei UI">
1010
<Grid>
1111
<Grid Margin="10">
1212
<Grid.RowDefinitions>

0 commit comments

Comments
 (0)
Please sign in to comment.