add: 久坐提醒项目文件

This commit is contained in:
2026-01-17 12:48:01 +08:00
commit 5fba4ff110
10 changed files with 1535 additions and 0 deletions

162
RestForm.cs Normal file
View File

@@ -0,0 +1,162 @@
using System;
using System.Drawing;
using System.Windows.Forms;
namespace TimerApp
{
public class RestForm : Form
{
private Label lblMessage;
private Label lblTimer;
private Button btnSkip;
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.Invoke(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();
}
}
}