view plaincopy to clipboardprint?
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using System.Drawing.Drawing2D;
namespace AnalogClock
{
public class AnalogClock : System.Windows.Forms.Form
{
private System.Windows.Forms.Timer timer1;
private System.ComponentModel.IContainer components;
public AnalogClock()
{
InitializeComponent();
//初始化;
}
protected override void Dispose( bool disposing )
{
if( disposing )
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}
#region Windows Form Designer generated code
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
System.Resources.ResourceManager resources = new System.Resources.ResourceManager(typeof(AnalogClock));
this.timer1 = new System.Windows.Forms.Timer(this.components);
//
// timer1
//
this.timer1.Enabled = true;
this.timer1.Interval = 1000;
this.timer1.Tick += new System.EventHandler(this.OnTick);
//
// AnalogClock
//
this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
this.BackColor = System.Drawing.SystemColors.Control;
this.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("$this.BackgroundImage")));
this.ClientSize = new System.Drawing.Size(306, 271);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
this.MaximizeBox = false;
this.Name = "AnalogClock";
this.Text = "模拟时钟 v1.1 neowang008";
this.Load += new System.EventHandler(this.AnalogClock_Load);
this.Paint += new System.Windows.Forms.PaintEventHandler(this.OnFormPaint);
}
#endregion
[STAThread]
static void Main()
{
Application.Run(new AnalogClock());
}
private void OnFormPaint(object sender, System.Windows.Forms.PaintEventArgs e)
{
Graphics g = e.Graphics;
g.TranslateTransform(ClientSize.Width/2, ClientSize.Height/2, MatrixOrder.Append);
DrawClock( e.Graphics );
}
private void DrawClock(Graphics g)
{
const double pai = Math.PI;
Point center = new Point (0, 0);
DateTime time = DateTime.Now;
//读取时间;
double secAng = 2.0*pai*time.Second/60.0;
double minAng = 2.0*pai*(time.Minute + time.Second/60.0)/60.0;
double hourAng = 2.0*pai*(time.Hour + time.Minute/60.0)/12.0;
//各指针单位换算;
int r = Math.Min( ClientSize.Width, ClientSize.Height ) / 2;
int secHandLength = (int)(0.65*r);
int minHandLength = (int)(0.6*r);
int hourHandLength = (int)(0.5*r);
//指针的长度定义;
Point secHand = new Point((int)(secHandLength*Math.Sin(secAng)),
(int)(-secHandLength*Math.Cos(secAng)));
Point minHand = new Point((int)(minHandLength*Math.Sin(minAng)),
(int)(-minHandLength*Math.Cos(minAng)));
Point hourHand = new Point((int)(hourHandLength*Math.Sin(hourAng)),
(int)(-hourHandLength*Math.Cos(hourAng)));
//刷新指针;
Pen SecPen = new Pen(Color.Red, 1);
g.DrawLine(SecPen, center, secHand);
Pen MinPen = new Pen(Color.RoyalBlue, 3);
g.DrawLine(MinPen, center, minHand);
Pen HourPen = new Pen(Color.CornflowerBlue, 5);
g.DrawLine(HourPen, center, hourHand);
//指针的样式定义;
}
private void OnTick(object sender, System.EventArgs e)
{
Invalidate();
}
private void AnalogClock_Load(object sender, System.EventArgs e)
{
}
}
}