| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255 |
- using System;
- using System.Collections.Generic;
- using System.ComponentModel;
- using System.Drawing;
- using System.Data;
- using System.Linq;
- using System.Text;
- using System.Windows.Forms;
- using System.Drawing.Drawing2D;
- /**************************************************************
- *
- * 一个显示时间的控件,用来显示当前的时间和额外的定制界面
- *
- *
- *
- *************************************************************/
- namespace HslCommunication.Controls
- {
- /// <summary>
- /// 一个时钟控件
- /// </summary>
- public partial class UserClock : UserControl
- {
- /// <summary>
- /// 实例化一个时钟控件
- /// </summary>
- public UserClock()
- {
- InitializeComponent();
- _Time1s.Interval=50;
- _Time1s.Tick+=_Time1s_Tick;
- DoubleBuffered = true;
- }
- private void ClockMy_Load(object sender, EventArgs e)
- {
- BackgroundImage = _BackGround();
- _Time1s.Start();
- }
- //1秒的时钟
- private Timer _Time1s = new Timer();
- private void _Time1s_Tick(object sender,EventArgs e)
- {
- _NowTime = DateTime.Now;
- this.Invalidate();
- }
- private Bitmap _BackGround()
- {
- int _Width = this.Width;
- Bitmap temp = new Bitmap(_Width - 20, _Width - 20);
- Graphics g = Graphics.FromImage(temp);
- g.SmoothingMode = SmoothingMode.AntiAlias; //使绘图质量最高,即消除锯齿
- //g.InterpolationMode = InterpolationMode.HighQualityBicubic;
- //g.CompositingQuality = CompositingQuality.HighQuality;
- Point _CenterPoint = new Point(temp.Width / 2, temp.Height / 2);
- int _R = (temp.Width - 1) / 2;
- Rectangle _Rec1 = new Rectangle(0, 0, temp.Width - 1, temp.Width - 1);
- Rectangle _Rec2 = new Rectangle(2, 2, temp.Width - 5, temp.Width - 5);
- Rectangle _Rec3 = new Rectangle(_CenterPoint.X - 4, _CenterPoint.Y - 4, 8, 8);
- Rectangle _Rec4 = new Rectangle(5, 5, temp.Width - 11, temp.Width - 11);
- Rectangle _Rec5 = new Rectangle(8, 8, temp.Width - 17, temp.Width - 17);
- g.FillEllipse(Brushes.DarkGray, _Rec1);
- g.FillEllipse(Brushes.White, _Rec2);
- g.DrawEllipse(new Pen(Brushes.Black, (float)1.5), _Rec3);
- g.TranslateTransform(_CenterPoint.X, _CenterPoint.Y);
- for (int i = 0; i < 60; i++)
- {
- g.RotateTransform(6);
- g.DrawLine(Pens.DarkGray, new Point(_R - 3, 0), new Point(_R - 1, 0));
- }
- for (int i = 0; i < 12; i++)
- {
- g.RotateTransform(30);
- g.DrawLine(new Pen(Color.Chocolate, 2), new Point(_R - 6, 0), new Point(_R - 1, 0));
- }
- g.ResetTransform();
- System.Drawing.Font FontTemp = new Font("Microsoft YaHei UI", 12);
- int IntOffset_X = _R / 2;
- int IntOffset_Y = (int)(_R * Math.Sqrt(3) / 2);
- g.DrawString("1", FontTemp, Brushes.Green, new PointF(_R + IntOffset_X - 13, _R - IntOffset_Y + 4));
- g.DrawString("2", FontTemp, Brushes.Green, new PointF(_R + IntOffset_Y - 17, _R - IntOffset_X - 2));
- g.DrawString("3", FontTemp, Brushes.Green, new PointF(2 * _R - 18, _R - 8));
- g.DrawString("4", FontTemp, Brushes.Green, new PointF(_R + IntOffset_Y - 18, _R + IntOffset_X - 14));
- g.DrawString("5", FontTemp, Brushes.Green, new PointF(_R + IntOffset_X - 14, _R + IntOffset_Y - 19));
- g.DrawString("6", FontTemp, Brushes.Green, new PointF(_R - 6, 2 * _R - 22));
- g.DrawString("7", FontTemp, Brushes.Green, new PointF(_R - IntOffset_X + 2, _R + IntOffset_Y - 19));
- g.DrawString("8", FontTemp, Brushes.Green, new PointF(_R - IntOffset_Y + 5, _R + IntOffset_X - 14));
- g.DrawString("9", FontTemp, Brushes.Green, new PointF(8, _R - 9));
- g.DrawString("10", FontTemp, Brushes.Green, new PointF(_R - IntOffset_Y + 4, _R - IntOffset_X - 2));
- g.DrawString("11", FontTemp, Brushes.Green, new PointF(_R - IntOffset_X, _R - IntOffset_Y + 3));
- g.DrawString("12", FontTemp, Brushes.Green, new PointF(_R - 10, 7));
- // g.DrawString("Sweet", new Font("Courier New", 9), Brushes.Green, new PointF(_R - 18, _R/2));
- Bitmap _temp = new Bitmap(this.Width, this.Height);
- Graphics g1 = Graphics.FromImage(_temp);
- g1.DrawImage(temp, new Point(10, 10));
- temp.Dispose();
- return _temp;
- }
- //#############################################################################################################
- //属性设计器
- //#############################################################################################################
- //
- //==================================================================================================
- private DateTime _NowTime = DateTime.Now;
- /// <summary>
- /// 获取时钟的当前时间
- /// </summary>
- [Category("我的属性"), Description("设置边框的宽度")]
- public DateTime 当前时间
- {
- get { return _NowTime; }
- }
- //==================================================================================================
- //小时的指针颜色
- private Color _HourColor = Color.Chocolate;
- /// <summary>
- /// 获取或设置时钟指针的颜色
- /// </summary>
- [Category("我的属性"), Description("设置时钟的指针颜色")]
- [DefaultValue(typeof(Color), "Chocolate")]
- public Color 时钟指针颜色
- {
- set { _HourColor = value; }
- get { return _HourColor; }
- }
- //==================================================================================================
- //分钟的指针颜色
- private Color _MiniteColor = Color.Coral;
- /// <summary>
- /// 获取或设置时钟分钟指针颜色
- /// </summary>
- [Category("我的属性"), Description("设置分钟的指针颜色")]
- [DefaultValue(typeof(Color), "Coral")]
- public Color 分钟指针颜色
- {
- set { _MiniteColor = value; }
- get { return _MiniteColor; }
- }
- //==================================================================================================
- //秒钟的指针颜色
- private Color _SecondColor = Color.Green;
- /// <summary>
- /// 获取或设置秒钟指针颜色
- /// </summary>
- [Category("我的属性"), Description("设置秒钟的指针颜色")]
- [DefaultValue(typeof(Color), "Green")]
- public Color 秒钟指针颜色
- {
- set { _SecondColor = value; }
- get { return _SecondColor; }
- }
- //==================================================================================================
- //显示的文本
- private string _ShowText = "Sweet";
- /// <summary>
- /// 获取或设置时钟的个性化文本
- /// </summary>
- [Category("我的属性"), Description("设置时钟显示的字符串")]
- [DefaultValue(typeof(string), "Sweet")]
- public string 显示文本
- {
- set { _ShowText = value; }
- get { return _ShowText; }
- }
- //==================================================================================================
- //显示的文本字体
- private string _ShowTextFont = "Courier New";
- /// <summary>
- /// 字体
- /// </summary>
- [Category("我的属性"), Description("设置时钟显示的字符串")]
- [DefaultValue(typeof(string), "Courier New")]
- public string 显示文本字体
- {
- set { _ShowTextFont = value; }
- get { return _ShowTextFont; }
- }
- /// <summary>
- /// 重绘控件显示
- /// </summary>
- /// <param name="e"></param>
- protected override void OnPaint(PaintEventArgs e)
- {
- base.OnPaint(e);
- int _R = (this.Width - 21) / 2;
- int _Hour = _NowTime.Hour;
- int _Minite = _NowTime.Minute;
- float _Seconds = _NowTime.Second + (float)_NowTime.Millisecond / 1000;
- int _ArcHour = _Hour * (30) + 270 + _Minite / 2;
- int _ArcMinite = _Minite * 6 + 270;
- float _ArcSeconds = _Seconds * 6 + 270;
- Graphics g = e.Graphics;
- g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.ClearTypeGridFit;
- System.Drawing.Font _font1 = new System.Drawing.Font(_ShowTextFont, 14);
- System.Drawing.Size _SizeTemp = g.MeasureString(_ShowText, _font1).ToSize();
- g.DrawString(_ShowText, _font1, Brushes.Green, new PointF(_R - _SizeTemp.Width / 2 + 10, _R / 2 + 12));
- g.SmoothingMode = SmoothingMode.AntiAlias;
- SizeF _Size = g.MeasureString(_NowTime.DayOfWeek.ToString(), new Font(_ShowTextFont, 10));
- g.DrawString(_NowTime.DayOfWeek.ToString(),
- new Font(_ShowTextFont, 10), Brushes.Chocolate, new PointF(_R - _Size.ToSize().Width / 2 + 10, _R * 3 / 2 - 2));
- g.TranslateTransform(this.Width / 2, this.Width / 2);
- g.RotateTransform(_ArcHour, MatrixOrder.Prepend);
- g.DrawLine(new Pen(_HourColor, 2), new Point(4, 0), new Point(9, 0));
- g.DrawClosedCurve(new Pen(_HourColor, 1), new Point[]{new Point(12,2),new Point(10,0),new Point(12,-2),new Point(_R/2,-2),
- new Point(_R/2+6,0),new Point(_R/2,2)});
- g.RotateTransform(-_ArcHour);
- g.RotateTransform(_ArcMinite, MatrixOrder.Prepend);
- g.DrawLine(new Pen(_MiniteColor, 2), new Point(4, 0), new Point(9, 0));
- g.DrawClosedCurve(new Pen(_MiniteColor, 1), new Point[]{new Point(14,2),new Point(10,0),new Point(14,-2),new Point(_R-17,-2),
- new Point(_R-10,0),new Point(_R-17,2)});
- g.RotateTransform(-_ArcMinite);
- g.RotateTransform(_ArcSeconds, MatrixOrder.Prepend);
- g.DrawLine(new Pen(_SecondColor, 1), new Point(-13, 0), new Point(_R - 6, 0));
- g.ResetTransform();
- string _StrDate = _NowTime.Year + "年" + _NowTime.Month + "月" + _NowTime.Day + "日";
- System.Drawing.Size _Size2 = g.MeasureString(_StrDate, new Font(_ShowTextFont, 12)).ToSize();
- g.DrawString(_StrDate, new Font(_ShowTextFont, 12), Brushes.Green, new PointF(_R - _Size2.Width / 2 + 10, _R * 2 + 15));
- }
- private void ClockMy_SizeChanged(object sender, EventArgs e)
- {
- this.BackgroundImage = _BackGround();
- }
- }
- }
|