也学了几天的编程了,做了个小时钟试试自己!
首先建一个窗体应用程序:(图片是运行的结果)
首先:重绘窗体,把窗体化成一个圆形!
protected override void OnPaint(PaintEventArgs e)
{
//把窗体画成圆
GraphicsPath shape = new GraphicsPath();
shape.AddEllipse(0, 0, 200, 200);
this.Region = new Region(shape);
}
然后就要在窗体上画表盘和数字了:这我写了个方法Clock
该方法需要有三个参数:即是时分秒
String date = DateTime.Now.ToLongDateString();
Graphics g = panel1.CreateGraphics();
Font fntDate = new Font("Verdana", 8);
Font fnt = new Font("Verdana", 12);
g.Clear(Color.Gray);//清楚指针走过的痕迹
g.DrawString(date, fntDate, new SolidBrush(Color.Black), 62, 62);//显示日期
//此处绘制表盘的刻度与指针
#region 表盘上的数字
g.DrawString("1", fnt, new SolidBrush(Color.Black), 140, 20);//画数字1
g.DrawString("2", fnt, new SolidBrush(Color.Black), 170, 50);//画数字2
g.DrawString("3", fnt, new SolidBrush(Color.Black), 180, 89);//画数字3
g.DrawString("4", fnt, new SolidBrush(Color.Black), 168, 133);//画数字4
g.DrawString("5", fnt, new SolidBrush(Color.Black), 140, 168);//画数字5
g.DrawString("6", fnt, new SolidBrush(Color.Black), 92, 180);//画数字6
g.DrawString("7", fnt, new SolidBrush(Color.Black), 50, 168);//画数字7
g.DrawString("8", fnt, new SolidBrush(Color.Black), 16, 133);//画数字8
g.DrawString("9", fnt, new SolidBrush(Color.Black), 0, 92);//画数字9
g.DrawString("10", fnt, new SolidBrush(Color.Black), 10, 53);//画数字10
g.DrawString("11", fnt, new SolidBrush(Color.Black), 37, 23);//画数字11
g.DrawString("12", fnt, new SolidBrush(Color.Black), 85, 0);//画数字12
#endregion
Pen penH = new Pen(Color.DarkBlue, 1);//画时针的画笔
Pen penM = new Pen(Color.DarkRed, 1);//画分针的画笔
Pen penS = new Pen(Color.Black, 1);//画秒针的画笔
//画秒针
float Xs = (float)(75 * Math.Sin(Second/30d*Math.PI) + 100);
float Ys = (float)(100 - 75 * Math.Cos(Second/30d*Math.PI));
g.DrawLine(penS,100,100, Xs, Ys);
//画分针
float Xm = (float)(70 * Math.Sin((Minute * 60 + Second) / 1800d * Math.PI) + 100);
float Ym = (float)(100 - 70 * Math.Cos((Minute * 60 + Second) / 1800d * Math.PI));
g.DrawLine(penM, 100, 100, Xm, Ym);
// 画时针
if (Hour > 12)
{
g.DrawString("PM", fntDate, new SolidBrush(Color.Black), 90, 120);//显示PM
Hour = Hour - 12;
}
else
{
g.DrawString("AM", fntDate, new SolidBrush(Color.Black), 90, 120);//显示AM
}
double AllSecondH = (Hour * 3600 + Minute * 60 + Second) / 21600d;
float Xh = (float)(50 * Math.Sin(AllSecondH * Math.PI) + 100);
float Yh = (float)(100 - 50 * Math.Cos(AllSecondH * Math.PI));
g.DrawLine(penH, 100, 100, Xh, Yh);
最后还需要一个Timer控件来刷新时钟:
int S = DateTime.Now.Second;//获取系统时间秒
int M= DateTime.Now.Minute;//获取系统时间分
int H = DateTime.Now.Hour;//获取系统时间时
Clock(s,m,h)
这基本及OK了,希望对你有所帮助!
转载于:https://blog.51cto.com/zzhxiaoshitou/1002199