C#实现的GDI+时钟
using
System;
002 | using System.Data; |
003 | using System.Drawing; |
004 | using System.Drawing.Drawing2D; |
005 | class Clock |
006 | { |
007 | private Point mickeyMouse = new Point(0, 0); |
008 | private void Form1_Paint( object sender, PaintEventArgs e) |
009 | { |
010 | DrawClock(e.Graphics); |
011 | timer1.Start(); |
012 | } |
013 |
014 | private void DrawClock(Graphics g) |
015 | { |
016 | ///centre(120, 130); |
017 | Rectangle outRect = new Rectangle(0, 0, 240, 260); |
018 | Rectangle midRect = new Rectangle(7, 7, 226, 246); |
019 | Rectangle inRect = new Rectangle(10, 10, 220, 240); |
020 | |
021 | LinearGradientBrush outlBlueBrush = new LinearGradientBrush(outRect, Color.FromA#000064, |
022 | Color.FromA#0000ff, LinearGradientMode.BackwardDiagonal); |
023 | LinearGradientBrush midlBlueBrush = new LinearGradientBrush(midRect, Color.FromA#0000ff, |
024 | Color.FromA#000064, LinearGradientMode.BackwardDiagonal); |
025 | LinearGradientBrush inlBlueBrush = new LinearGradientBrush(inRect, Color.FromA#000064, |
026 | Color.FromA#0000ff, LinearGradientMode.BackwardDiagonal); |
027 | |
028 | g.FillEllipse(outlBlueBrush, outRect); |
029 | g.FillEllipse(midlBlueBrush, midRect); |
030 | g.FillEllipse(inlBlueBrush, inRect); |
031 | outlBlueBrush.Dispose(); |
032 | midlBlueBrush.Dispose(); |
033 | inlBlueBrush.Dispose(); |
034 | Font myFont = new Font( "Arial" , 20, FontStyle.Bold); |
035 | SolidBrush whiteBrush = new SolidBrush(Color.White); |
036 | g.DrawString( "12" , myFont, whiteBrush, 100, 10); |
037 | g.DrawString( "6" , myFont, whiteBrush, 110, 223); |
038 | g.DrawString( "3" , myFont, whiteBrush, 210, 120); |
039 | g.DrawString( "9" , myFont, whiteBrush, 10, 120); |
040 | g.DrawString( "1" , myFont, whiteBrush, 160, 26); |
041 | g.DrawString( "2" , myFont, whiteBrush, 194, 64); |
042 | g.DrawString( "5" , myFont, whiteBrush, 156, 210); |
043 | g.DrawString( "4" , myFont, whiteBrush, 192, 174); |
044 | g.DrawString( "11" , myFont, whiteBrush, 55, 28); |
045 | g.DrawString( "10" , myFont, whiteBrush, 22, 66); |
046 | g.DrawString( "7" , myFont, whiteBrush, 64, 210); |
047 | g.DrawString( "8" , myFont, whiteBrush, 28, 174); |
048 | myFont.Dispose(); |
049 | whiteBrush.Dispose(); |
050 | //DateTime; |
051 | g.TranslateTransform(120, 130, MatrixOrder.Append); |
052 | Pen hourPen = new Pen(Color.White, 6); |
053 | hourPen.SetLineCap(LineCap.RoundAnchor, LineCap.ArrowAnchor, DashCap.Flat); |
054 | Pen minutePen = new Pen(Color.White, 4); |
055 | minutePen.SetLineCap(LineCap.RoundAnchor, LineCap.ArrowAnchor, DashCap.Flat); |
056 | Pen secondPen = new Pen(Color.Red, 2); |
057 | int sec = DateTime.Now.Second; |
058 | int min = DateTime.Now.Minute; |
059 | int hour = DateTime.Now.Hour; |
060 | double secondAngle = 2.0 * Math.PI * sec / 60.0; |
061 | double minuteAngle = 2.0 * Math.PI * (min + sec / 60.0) / 60.0; |
062 | double hourAngle = 2.0 * Math.PI * (hour + min / 60.0) / 12.0; |
063 | Point centre = new Point(0, 0); |
064 | Point hourHand = new Point(( int )(40 * Math.Sin(hourAngle)), |
065 | ( int )(-40 * Math.Cos(hourAngle))); |
066 | g.DrawLine(hourPen, centre, hourHand); |
067 | |
068 | Point minHand = new Point(( int )(80 * Math.Sin(minuteAngle)), |
069 | ( int )(-80 * Math.Cos(minuteAngle))); |
070 | g.DrawLine(minutePen, centre, minHand); |
071 | |
072 | Point secHand = new Point(( int )(80 * Math.Sin(secondAngle)), |
073 | ( int )(-80 * Math.Cos(secondAngle))); |
074 | g.DrawLine(secondPen, centre, secHand); |
075 | |
076 | hourPen.Dispose(); |
077 | minutePen.Dispose(); |
078 | secondPen.Dispose(); |
079 | } |
080 | private void timer1_Tick( object sender, EventArgs e) |
081 | { |
082 | this .Invalidate(); |
083 | } |
084 | private void hideToolStripMenuItem_Click( object sender, EventArgs e) |
085 | { |
086 | if (contextMenuStrip1.Items[0].ToString() == "Hide" ) |
087 | { |
088 | this .Hide(); |
089 | contextMenuStrip1.Items[0].Text = "Show" ; |
090 | return ; |
091 | } |
092 | |
093 | if (contextMenuStrip1.Items[0].ToString() == "Show" ) |
094 | { |
095 | this .Show(); |
096 | contextMenuStrip1.Items[0].Text = "Hide" ; |
097 | return ; |
098 | } |
099 | } |
100 | private void Form1_MouseDown( object sender, MouseEventArgs e) |
101 | { |
102 | mickeyMouse = new Point(-e.X, -e.Y); |
103 | } |
104 | private void Form1_MouseMove( object sender, MouseEventArgs e) |
105 | { |
106 | if (e.Button == MouseButtons.Left) |
107 | { |
108 | Point mousePos = Control.MousePosition; |
109 | mousePos.Offset(mickeyMouse.X, mickeyMouse.Y); |
110 | Location = mousePos; |
111 | } |
112 | } |
113 | private void notifyIcon1_DoubleClick( object sender, EventArgs e) |
114 | { |
115 | if (contextMenuStrip1.Items[0].ToString() == "Show" ) |
116 | { |
117 | this .Show(); |
118 | contextMenuStrip1.Items[0].Text = "Hide" ; |
119 | return ; |
120 | } |
121 | } |
122 | } |