improve:计时器UI与点名UI

改进视觉反馈和按钮逻辑及窗口置顶
This commit is contained in:
2025-11-15 21:14:08 +08:00
parent 082c9a03ec
commit bf2b8fec35
7 changed files with 254 additions and 9 deletions
+53 -7
View File
@@ -52,6 +52,26 @@ namespace Ink_Canvas
// 添加窗口加载事件处理,确保置顶
Loaded += TimerWindow_Loaded;
// 暂停主窗口的置顶维护
var mainWindow = Application.Current.MainWindow as MainWindow;
if (mainWindow != null)
{
mainWindow.PauseTopmostMaintenance();
}
// 窗口关闭时恢复主窗口的置顶维护
Closing += TimerWindow_Closing;
}
private void TimerWindow_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
// 恢复主窗口的置顶维护
var mainWindow = Application.Current.MainWindow as MainWindow;
if (mainWindow != null)
{
mainWindow.ResumeTopmostMaintenance();
}
}
@@ -116,6 +136,12 @@ namespace Ink_Canvas
StartPauseIcon.Data = Geometry.Parse(PlayIconData);
PlayTimerSound();
// 禁用全屏按钮
if (FullscreenBtn != null)
{
FullscreenBtn.IsEnabled = false;
}
TimerCompleted?.Invoke(this, EventArgs.Empty);
HandleTimerCompletion();
}
@@ -337,7 +363,7 @@ namespace Ink_Canvas
minimizedWindow = new MinimizedTimerWindow(this);
minimizedWindow.Show();
// 确保最小化窗口也置顶
// 确保最小化窗口也置顶(窗口加载时会自动应用)
minimizedWindow.Topmost = true;
// 隐藏主窗口
@@ -793,6 +819,12 @@ namespace Ink_Canvas
// 保存到最近计时记录
SaveRecentTimer();
// 启用全屏按钮
if (FullscreenBtn != null)
{
FullscreenBtn.IsEnabled = true;
}
}
}
@@ -808,6 +840,12 @@ namespace Ink_Canvas
isOvertimeMode = false;
UpdateDigitDisplays();
StartPauseIcon.Data = Geometry.Parse(PlayIconData);
// 禁用全屏按钮
if (FullscreenBtn != null)
{
FullscreenBtn.IsEnabled = false;
}
}
private void PlayTimerSound()
@@ -884,6 +922,13 @@ namespace Ink_Canvas
private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
isTimerRunning = false;
// 恢复主窗口的置顶维护
var mainWindow = Application.Current.MainWindow as MainWindow;
if (mainWindow != null)
{
mainWindow.ResumeTopmostMaintenance();
}
}
private void CloseButton_Click(object sender, RoutedEventArgs e)
@@ -1292,6 +1337,10 @@ namespace Ink_Canvas
private void Fullscreen_Click(object sender, RoutedEventArgs e)
{
if (!isTimerRunning)
{
return;
}
ShowFullscreenTimer();
}
@@ -1304,7 +1353,7 @@ namespace Ink_Canvas
fullscreenWindow = new FullscreenTimerWindow(this);
fullscreenWindow.Show();
// 确保全屏窗口也置顶
// 确保全屏窗口也置顶(窗口加载时会自动应用)
fullscreenWindow.Topmost = true;
// 隐藏主窗口
@@ -1384,10 +1433,6 @@ namespace Ink_Canvas
var hwnd = new WindowInteropHelper(this).Handle;
if (hwnd == IntPtr.Zero) return;
// 强制激活窗口
Activate();
Focus();
// 设置WPF的Topmost属性
Topmost = true;
@@ -1397,8 +1442,9 @@ namespace Ink_Canvas
SetWindowLong(hwnd, GWL_EXSTYLE, exStyle | WS_EX_TOPMOST);
// 2. 使用SetWindowPos确保窗口在最顶层
// 使用HWND_TOPMOST确保窗口始终在所有其他窗口之上,包括主窗口
SetWindowPos(hwnd, HWND_TOPMOST, 0, 0, 0, 0,
SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE | SWP_SHOWWINDOW | SWP_NOOWNERZORDER);
SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE | SWP_SHOWWINDOW);
LogHelper.WriteLogToFile("计时器窗口已应用置顶", LogHelper.LogType.Trace);
}