Files
TimerApp/RestForm.cs

163 lines
6.3 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using System;
using System.Drawing;
using System.Windows.Forms;
namespace TimerApp
{
public class RestForm : Form
{
private Label lblMessage = null!;
private Label lblTimer = null!;
private Button btnSkip = null!;
public event EventHandler? SkipRequested;
public RestForm()
{
InitializeComponent();
}
private void InitializeComponent()
{
this.lblMessage = new System.Windows.Forms.Label();
this.lblTimer = new System.Windows.Forms.Label();
// this.btnSkip = new RoundedButton(); // Removed custom button
this.SuspendLayout();
// ... (keep form settings)
//
// Form 设置
//
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
this.WindowState = FormWindowState.Maximized;
this.TopMost = true;
this.BackColor = System.Drawing.Color.Black;
this.Opacity = 0.90; // 90% 不透明度
this.ShowInTaskbar = false;
this.Name = "RestForm";
this.Text = "Rest Now";
this.SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.UserPaint | ControlStyles.DoubleBuffer | ControlStyles.ResizeRedraw, true);
//
// lblMessage
//
this.lblMessage.AutoSize = false;
this.lblMessage.Font = new System.Drawing.Font("Microsoft YaHei UI", 36F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point);
this.lblMessage.ForeColor = System.Drawing.Color.White;
this.lblMessage.Location = new System.Drawing.Point(100, 100);
this.lblMessage.Name = "lblMessage";
// 初始大小会在CenterControls中动态调整
this.lblMessage.Size = new System.Drawing.Size(800, 100);
this.lblMessage.TabIndex = 0;
this.lblMessage.Text = "休息一下,看看远方";
this.lblMessage.TextAlign = ContentAlignment.MiddleCenter;
//
// lblTimer
//
this.lblTimer.AutoSize = false;
this.lblTimer.Font = new System.Drawing.Font("Segoe UI Light", 72F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
this.lblTimer.ForeColor = System.Drawing.Color.LightGreen;
this.lblTimer.Location = new System.Drawing.Point(100, 200);
this.lblTimer.Name = "lblTimer";
// 初始大小会在CenterControls中动态调整
this.lblTimer.Size = new System.Drawing.Size(400, 180);
this.lblTimer.TabIndex = 1;
this.lblTimer.Text = "01:00";
this.lblTimer.TextAlign = ContentAlignment.MiddleCenter;
//
// btnSkip
//
this.btnSkip = new System.Windows.Forms.Button();
this.btnSkip.BackColor = System.Drawing.Color.FromArgb(63, 63, 70);
this.btnSkip.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.btnSkip.FlatAppearance.BorderSize = 0;
this.btnSkip.FlatAppearance.MouseOverBackColor = System.Drawing.Color.FromArgb(80, 80, 90);
this.btnSkip.Font = new System.Drawing.Font("Microsoft YaHei UI", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
this.btnSkip.ForeColor = System.Drawing.Color.White;
this.btnSkip.Location = new System.Drawing.Point(100, 400);
this.btnSkip.Name = "btnSkip";
this.btnSkip.Size = new System.Drawing.Size(120, 46);
this.btnSkip.TabIndex = 2;
this.btnSkip.Text = "跳过";
this.btnSkip.UseVisualStyleBackColor = false;
this.btnSkip.Cursor = System.Windows.Forms.Cursors.Hand;
this.btnSkip.Click += new System.EventHandler(this.btnSkip_Click);
// Add controls
this.Controls.Add(this.btnSkip);
this.Controls.Add(this.lblMessage);
this.Controls.Add(this.lblTimer);
this.btnSkip.BringToFront();
this.Load += new System.EventHandler(this.RestForm_Load);
this.Resize += new System.EventHandler(this.RestForm_Resize);
this.ResumeLayout(false);
this.PerformLayout();
}
private void RestForm_Load(object? sender, EventArgs e)
{
CenterControls();
}
private void RestForm_Resize(object? sender, EventArgs e)
{
CenterControls();
}
private void CenterControls()
{
// 简单的居中计算
int centerX = this.Width / 2;
int centerY = this.Height / 2;
// Equal spacing logic
int spacing = 80;
// 使用足够大的固定大小,确保文本完整显示
// 使用屏幕宽度的85%作为最大宽度,确保在不同分辨率下都能完整显示
int maxWidth = (int)(this.Width * 0.85);
// 消息文本:使用足够大的尺寸
lblMessage.Size = new Size(maxWidth, 120);
// 时间文本使用足够大的尺寸72pt字体需要较大空间
lblTimer.Size = new Size(maxWidth, 200);
// Timer Center = centerY
lblTimer.Location = new Point(centerX - lblTimer.Width / 2, centerY - lblTimer.Height / 2);
// Message above Timer
lblMessage.Location = new Point(centerX - lblMessage.Width / 2, lblTimer.Top - spacing - lblMessage.Height);
// Button below Timer
btnSkip.Location = new Point(centerX - btnSkip.Width / 2, lblTimer.Bottom + spacing);
}
public void UpdateTime(TimeSpan remaining)
{
if (lblTimer.InvokeRequired)
{
lblTimer.BeginInvoke(new Action<TimeSpan>(UpdateTime), remaining);
}
else
{
// 只更新文本,不重新居中,避免闪烁
// 由于lblTimer已设置固定大小文本居中显示不会因为文本变化而改变位置
lblTimer.Text = $"{remaining.Minutes:D2}:{remaining.Seconds:D2}";
}
}
private void btnSkip_Click(object? sender, EventArgs e)
{
SkipRequested?.Invoke(this, EventArgs.Empty);
this.Close();
}
}
}