- 浏览: 41090 次
文章分类
最新评论
效果图:
接着上次的简单时钟,这次要高级多了,算法更正,可以自定义时钟分钟秒钟刻度等颜色,与系统时钟对应,随你怎么改,源代码具有很高的参考价值。
第一步:添加用户控件,命名为myNewClock
第二步:定义变量,要用到时钟,画布等
private Timer myTimer;//定义时钟,定时重新绘制
private Graphics g;//创建画布
private Pen pen;//创建画笔
private int width;//画布高度
private int height;//画布宽度
第三步:定义属性,可以自由增加
Color hourColor = Color.Red;
/// <summary>
/// 时钟颜色
/// </summary>
[CategoryAttribute("颜色"), Description("时钟颜色")]
public Color HourColor
{
get { return hourColor; }
set { hourColor=value; }
}
Color minuteColor = Color.Green;
/// <summary>
/// 分钟颜色
/// </summary>
[CategoryAttribute("颜色"), Description("分钟颜色")]
public Color MinuteColor
{
get { return minuteColor; }
set { minuteColor = value; }
}
Color secondColor = Color.Blue;
/// <summary>
/// 秒钟颜色
/// </summary>
[CategoryAttribute("颜色"), Description("秒钟颜色")]
public Color SecondColor
{
get { return secondColor; }
set { secondColor = value; }
}
Color bigScaleColor = Color.DarkGreen;
/// <summary>
/// 大刻度颜色
/// </summary>
[CategoryAttribute("颜色"), Description("大刻度颜色")]
public Color BigScaleColor
{
get { return bigScaleColor; }
set { bigScaleColor = value; }
}
Color litterScaleColor = Color.Olive;
/// <summary>
/// 小刻度颜色
/// </summary>
[CategoryAttribute("颜色"), Description("小刻度颜色")]
public Color LitterScaleColor
{
get { return litterScaleColor; }
set { litterScaleColor = value; }
}
Color textColor = Color.White;
/// <summary>
/// 刻度值颜色
/// </summary>
[CategoryAttribute("颜色"), Description("刻度值颜色")]
public Color TextColor
{
get { return textColor; }
set { textColor = value; }
}
Color bigBackColor = Color.Black;
/// <summary>
/// 外圆背景色
/// </summary>
[CategoryAttribute("颜色"), Description("外圆背景颜色")]
public Color BigBackColor
{
get { return bigBackColor; }
set { bigBackColor = value; }
}
Color litterBackColor = Color.White;
/// <summary>
/// 内圆颜色
/// </summary>
[CategoryAttribute("颜色"), Description("内圆颜色")]
public Color LitterBackColor
{
get { return litterBackColor; }
set { litterBackColor = value; }
}
第四步:重写OnPaint方法
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
g = e.Graphics;
g.SmoothingMode = SmoothingMode.AntiAlias; //
g.SmoothingMode = SmoothingMode.HighQuality;//绘图模式 默认为粗糙模式,将会出现锯齿!
width = this.Width;//时钟宽度
height = this.Height;//时钟高度
int x1 = 0;//开始绘制时钟起点X坐标
int y1 = 0;//开始绘制时钟起点Y坐标
/*------------------------------------------------------------------------------
计算:整点刻度12个,每个刻度偏移角度为360/12 = 30 度 及为小时偏移角度
分秒刻度为60个,每个刻度偏移角度为360/60 = 6 度 及为分、秒偏移角度
--------------------------------------------------------------------------------*/
g.FillEllipse(new SolidBrush( bigBackColor), x1 + 2, y1 + 2, width - 4, height - 4); //外圆
pen = new Pen(new SolidBrush(litterBackColor), 2);
g.DrawEllipse(pen, x1 + 7, y1 + 7, width - 13, height - 13);// 内圆
g.TranslateTransform(x1 + (width / 2), y1 + (height / 2));//重新设置坐标原点
g.FillEllipse(Brushes.White, -5, -5, 10, 10);//绘制表盘中心
for (int x = 0; x < 60; x++) //小刻度
{
g.FillRectangle(new SolidBrush(litterScaleColor), new Rectangle(-2, (System.Convert.ToInt16(height - / 2 - 2) * (-1), 3, 10));
g.RotateTransform(6);//偏移角度
}
for (int i = 12; i > 0; i--) //大刻度
{
string myString = i.ToString();
//绘制整点刻度
g.FillRectangle(new SolidBrush(bigScaleColor), new Rectangle(-3, (System.Convert.ToInt16(height - / 2 - 2) * (-1), 6, 20));
//绘制数值
g.DrawString(myString, new Font(new FontFamily("Times New Roman"),14, FontStyle.Bold, GraphicsUnit.Pixel),new SolidBrush( textColor), new PointF(myString.Length * (-6), (height - / -2 + 26));
//顺时针旋转30度
g.RotateTransform(-30);//偏移角度
}
//获得系统时间值
int second = DateTime.Now.Second;
int minute = DateTime.Now.Minute;
int hour = DateTime.Now.Hour;
/*------------------------------------------------------------------------------------
每秒偏移6度,秒针偏移=当前秒*6
每分偏移6读,分针偏移 = 当前分*6+当前秒*(6/60)
每小时偏移60读,时针偏移 = 当前时*30+当前分*(6/60)+当前秒*(6/60/60)
--------------------------------------------------------------------------------------*/
//绘秒针
pen = new Pen(secondColor, 1);
pen.EndCap = LineCap.ArrowAnchor;
g.RotateTransform(6 * second);
float y = (float)((-1) * (height / 2.75));
g.DrawLine(pen, new PointF(0, 0), new PointF((float)0, y));
////绘分针
pen = new Pen(minuteColor, 4);
pen.EndCap = LineCap.ArrowAnchor;
g.RotateTransform(-6 * second); //恢复系统偏移量,再计算下次偏移
g.RotateTransform((float)(second * 0.1 + minute * 6));
y = (float)((-1) * ((height - 30) / 2.75));
g.DrawLine(pen, new PointF(0, 0), new PointF((float)0, y));
////绘时针
pen = new Pen(hourColor, 6);
pen.EndCap = LineCap.ArrowAnchor;
g.RotateTransform((float)(-second * 0.1 - minute * 6));//恢复系统偏移量,再计算下次偏移
g.RotateTransform((float)(second * 0.01 + minute * 0.1 + hour * 30));
y = (float)((-1) * ((height - 45) / 2.75));
g.DrawLine(pen, new PointF(0, 0), new PointF((float)0, y));
}
贴出全部代码:
//控件名:myNewClock
//作者:刘典武
//时间:2011-06-10
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Text;
using System.Windows.Forms;
using System.Drawing.Drawing2D;
namespace myControl
{
public partial class myNewClock : UserControl
{
public myNewClock()
{
InitializeComponent();
this.SetStyle(ControlStyles.AllPaintingInWmPaint, true);
this.SetStyle(ControlStyles.DoubleBuffer, true);
this.SetStyle(ControlStyles.ResizeRedraw, true);
this.SetStyle(ControlStyles.Selectable, true);
this.SetStyle(ControlStyles.SupportsTransparentBackColor, true);
this.SetStyle(ControlStyles.UserPaint, true);
myTimer = new Timer();
myTimer.Interval =1000;
myTimer.Enabled = true;
myTimer.Tick += new EventHandler(myTimer_Tick);
}
private void myTimer_Tick(object sender, EventArgs e)
{
this.Invalidate();
}
private Timer myTimer;//定义时钟,定时重新绘制
private Graphics g;//创建画布
private Pen pen;//创建画笔
private int width;//画布高度
private int height;//画布宽度
Color hourColor = Color.Red;
/// <summary>
/// 时钟颜色
/// </summary>
[CategoryAttribute("颜色"), Description("时钟颜色")]
public Color HourColor
{
get { return hourColor; }
set { hourColor=value; }
}
Color minuteColor = Color.Green;
/// <summary>
/// 分钟颜色
/// </summary>
[CategoryAttribute("颜色"), Description("分钟颜色")]
public Color MinuteColor
{
get { return minuteColor; }
set { minuteColor = value; }
}
Color secondColor = Color.Blue;
/// <summary>
/// 秒钟颜色
/// </summary>
[CategoryAttribute("颜色"), Description("秒钟颜色")]
public Color SecondColor
{
get { return secondColor; }
set { secondColor = value; }
}
Color bigScaleColor = Color.DarkGreen;
/// <summary>
/// 大刻度颜色
/// </summary>
[CategoryAttribute("颜色"), Description("大刻度颜色")]
public Color BigScaleColor
{
get { return bigScaleColor; }
set { bigScaleColor = value; }
}
Color litterScaleColor = Color.Olive;
/// <summary>
/// 小刻度颜色
/// </summary>
[CategoryAttribute("颜色"), Description("小刻度颜色")]
public Color LitterScaleColor
{
get { return litterScaleColor; }
set { litterScaleColor = value; }
}
Color textColor = Color.White;
/// <summary>
/// 刻度值颜色
/// </summary>
[CategoryAttribute("颜色"), Description("刻度值颜色")]
public Color TextColor
{
get { return textColor; }
set { textColor = value; }
}
Color bigBackColor = Color.Black;
/// <summary>
/// 外圆背景色
/// </summary>
[CategoryAttribute("颜色"), Description("外圆背景颜色")]
public Color BigBackColor
{
get { return bigBackColor; }
set { bigBackColor = value; }
}
Color litterBackColor = Color.White;
/// <summary>
/// 内圆颜色
/// </summary>
[CategoryAttribute("颜色"), Description("内圆颜色")]
public Color LitterBackColor
{
get { return litterBackColor; }
set { litterBackColor = value; }
}
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
g = e.Graphics;
g.SmoothingMode = SmoothingMode.AntiAlias; //
g.SmoothingMode = SmoothingMode.HighQuality;//绘图模式 默认为粗糙模式,将会出现锯齿!
width = this.Width;//时钟宽度
height = this.Height;//时钟高度
int x1 = 0;//开始绘制时钟起点X坐标
int y1 = 0;//开始绘制时钟起点Y坐标
/*------------------------------------------------------------------------------
计算:整点刻度12个,每个刻度偏移角度为360/12 = 30 度 及为小时偏移角度
分秒刻度为60个,每个刻度偏移角度为360/60 = 6 度 及为分、秒偏移角度
--------------------------------------------------------------------------------*/
g.FillEllipse(new SolidBrush( bigBackColor), x1 + 2, y1 + 2, width - 4, height - 4); //外圆
pen = new Pen(new SolidBrush(litterBackColor), 2);
g.DrawEllipse(pen, x1 + 7, y1 + 7, width - 13, height - 13);// 内圆
g.TranslateTransform(x1 + (width / 2), y1 + (height / 2));//重新设置坐标原点
g.FillEllipse(Brushes.White, -5, -5, 10, 10);//绘制表盘中心
for (int x = 0; x < 60; x++) //小刻度
{
g.FillRectangle(new SolidBrush(litterScaleColor), new Rectangle(-2, (System.Convert.ToInt16(height - / 2 - 2) * (-1), 3, 10));
g.RotateTransform(6);//偏移角度
}
for (int i = 12; i > 0; i--) //大刻度
{
string myString = i.ToString();
//绘制整点刻度
g.FillRectangle(new SolidBrush(bigScaleColor), new Rectangle(-3, (System.Convert.ToInt16(height - / 2 - 2) * (-1), 6, 20));
//绘制数值
g.DrawString(myString, new Font(new FontFamily("Times New Roman"),14, FontStyle.Bold, GraphicsUnit.Pixel),new SolidBrush( textColor), new PointF(myString.Length * (-6), (height - / -2 + 26));
//顺时针旋转30度
g.RotateTransform(-30);//偏移角度
}
//获得系统时间值
int second = DateTime.Now.Second;
int minute = DateTime.Now.Minute;
int hour = DateTime.Now.Hour;
/*------------------------------------------------------------------------------------
每秒偏移6度,秒针偏移=当前秒*6
每分偏移6读,分针偏移 = 当前分*6+当前秒*(6/60)
每小时偏移60读,时针偏移 = 当前时*30+当前分*(6/60)+当前秒*(6/60/60)
--------------------------------------------------------------------------------------*/
//绘秒针
pen = new Pen(secondColor, 1);
pen.EndCap = LineCap.ArrowAnchor;
g.RotateTransform(6 * second);
float y = (float)((-1) * (height / 2.75));
g.DrawLine(pen, new PointF(0, 0), new PointF((float)0, y));
////绘分针
pen = new Pen(minuteColor, 4);
pen.EndCap = LineCap.ArrowAnchor;
g.RotateTransform(-6 * second); //恢复系统偏移量,再计算下次偏移
g.RotateTransform((float)(second * 0.1 + minute * 6));
y = (float)((-1) * ((height - 30) / 2.75));
g.DrawLine(pen, new PointF(0, 0), new PointF((float)0, y));
////绘时针
pen = new Pen(hourColor, 6);
pen.EndCap = LineCap.ArrowAnchor;
g.RotateTransform((float)(-second * 0.1 - minute * 6));//恢复系统偏移量,再计算下次偏移
g.RotateTransform((float)(second * 0.01 + minute * 0.1 + hour * 30));
y = (float)((-1) * ((height - 45) / 2.75));
g.DrawLine(pen, new PointF(0, 0), new PointF((float)0, y));
}
}
}
接着上次的简单时钟,这次要高级多了,算法更正,可以自定义时钟分钟秒钟刻度等颜色,与系统时钟对应,随你怎么改,源代码具有很高的参考价值。
第一步:添加用户控件,命名为myNewClock
第二步:定义变量,要用到时钟,画布等
private Timer myTimer;//定义时钟,定时重新绘制
private Graphics g;//创建画布
private Pen pen;//创建画笔
private int width;//画布高度
private int height;//画布宽度
第三步:定义属性,可以自由增加
Color hourColor = Color.Red;
/// <summary>
/// 时钟颜色
/// </summary>
[CategoryAttribute("颜色"), Description("时钟颜色")]
public Color HourColor
{
get { return hourColor; }
set { hourColor=value; }
}
Color minuteColor = Color.Green;
/// <summary>
/// 分钟颜色
/// </summary>
[CategoryAttribute("颜色"), Description("分钟颜色")]
public Color MinuteColor
{
get { return minuteColor; }
set { minuteColor = value; }
}
Color secondColor = Color.Blue;
/// <summary>
/// 秒钟颜色
/// </summary>
[CategoryAttribute("颜色"), Description("秒钟颜色")]
public Color SecondColor
{
get { return secondColor; }
set { secondColor = value; }
}
Color bigScaleColor = Color.DarkGreen;
/// <summary>
/// 大刻度颜色
/// </summary>
[CategoryAttribute("颜色"), Description("大刻度颜色")]
public Color BigScaleColor
{
get { return bigScaleColor; }
set { bigScaleColor = value; }
}
Color litterScaleColor = Color.Olive;
/// <summary>
/// 小刻度颜色
/// </summary>
[CategoryAttribute("颜色"), Description("小刻度颜色")]
public Color LitterScaleColor
{
get { return litterScaleColor; }
set { litterScaleColor = value; }
}
Color textColor = Color.White;
/// <summary>
/// 刻度值颜色
/// </summary>
[CategoryAttribute("颜色"), Description("刻度值颜色")]
public Color TextColor
{
get { return textColor; }
set { textColor = value; }
}
Color bigBackColor = Color.Black;
/// <summary>
/// 外圆背景色
/// </summary>
[CategoryAttribute("颜色"), Description("外圆背景颜色")]
public Color BigBackColor
{
get { return bigBackColor; }
set { bigBackColor = value; }
}
Color litterBackColor = Color.White;
/// <summary>
/// 内圆颜色
/// </summary>
[CategoryAttribute("颜色"), Description("内圆颜色")]
public Color LitterBackColor
{
get { return litterBackColor; }
set { litterBackColor = value; }
}
第四步:重写OnPaint方法
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
g = e.Graphics;
g.SmoothingMode = SmoothingMode.AntiAlias; //
g.SmoothingMode = SmoothingMode.HighQuality;//绘图模式 默认为粗糙模式,将会出现锯齿!
width = this.Width;//时钟宽度
height = this.Height;//时钟高度
int x1 = 0;//开始绘制时钟起点X坐标
int y1 = 0;//开始绘制时钟起点Y坐标
/*------------------------------------------------------------------------------
计算:整点刻度12个,每个刻度偏移角度为360/12 = 30 度 及为小时偏移角度
分秒刻度为60个,每个刻度偏移角度为360/60 = 6 度 及为分、秒偏移角度
--------------------------------------------------------------------------------*/
g.FillEllipse(new SolidBrush( bigBackColor), x1 + 2, y1 + 2, width - 4, height - 4); //外圆
pen = new Pen(new SolidBrush(litterBackColor), 2);
g.DrawEllipse(pen, x1 + 7, y1 + 7, width - 13, height - 13);// 内圆
g.TranslateTransform(x1 + (width / 2), y1 + (height / 2));//重新设置坐标原点
g.FillEllipse(Brushes.White, -5, -5, 10, 10);//绘制表盘中心
for (int x = 0; x < 60; x++) //小刻度
{
g.FillRectangle(new SolidBrush(litterScaleColor), new Rectangle(-2, (System.Convert.ToInt16(height - / 2 - 2) * (-1), 3, 10));
g.RotateTransform(6);//偏移角度
}
for (int i = 12; i > 0; i--) //大刻度
{
string myString = i.ToString();
//绘制整点刻度
g.FillRectangle(new SolidBrush(bigScaleColor), new Rectangle(-3, (System.Convert.ToInt16(height - / 2 - 2) * (-1), 6, 20));
//绘制数值
g.DrawString(myString, new Font(new FontFamily("Times New Roman"),14, FontStyle.Bold, GraphicsUnit.Pixel),new SolidBrush( textColor), new PointF(myString.Length * (-6), (height - / -2 + 26));
//顺时针旋转30度
g.RotateTransform(-30);//偏移角度
}
//获得系统时间值
int second = DateTime.Now.Second;
int minute = DateTime.Now.Minute;
int hour = DateTime.Now.Hour;
/*------------------------------------------------------------------------------------
每秒偏移6度,秒针偏移=当前秒*6
每分偏移6读,分针偏移 = 当前分*6+当前秒*(6/60)
每小时偏移60读,时针偏移 = 当前时*30+当前分*(6/60)+当前秒*(6/60/60)
--------------------------------------------------------------------------------------*/
//绘秒针
pen = new Pen(secondColor, 1);
pen.EndCap = LineCap.ArrowAnchor;
g.RotateTransform(6 * second);
float y = (float)((-1) * (height / 2.75));
g.DrawLine(pen, new PointF(0, 0), new PointF((float)0, y));
////绘分针
pen = new Pen(minuteColor, 4);
pen.EndCap = LineCap.ArrowAnchor;
g.RotateTransform(-6 * second); //恢复系统偏移量,再计算下次偏移
g.RotateTransform((float)(second * 0.1 + minute * 6));
y = (float)((-1) * ((height - 30) / 2.75));
g.DrawLine(pen, new PointF(0, 0), new PointF((float)0, y));
////绘时针
pen = new Pen(hourColor, 6);
pen.EndCap = LineCap.ArrowAnchor;
g.RotateTransform((float)(-second * 0.1 - minute * 6));//恢复系统偏移量,再计算下次偏移
g.RotateTransform((float)(second * 0.01 + minute * 0.1 + hour * 30));
y = (float)((-1) * ((height - 45) / 2.75));
g.DrawLine(pen, new PointF(0, 0), new PointF((float)0, y));
}
贴出全部代码:
//控件名:myNewClock
//作者:刘典武
//时间:2011-06-10
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Text;
using System.Windows.Forms;
using System.Drawing.Drawing2D;
namespace myControl
{
public partial class myNewClock : UserControl
{
public myNewClock()
{
InitializeComponent();
this.SetStyle(ControlStyles.AllPaintingInWmPaint, true);
this.SetStyle(ControlStyles.DoubleBuffer, true);
this.SetStyle(ControlStyles.ResizeRedraw, true);
this.SetStyle(ControlStyles.Selectable, true);
this.SetStyle(ControlStyles.SupportsTransparentBackColor, true);
this.SetStyle(ControlStyles.UserPaint, true);
myTimer = new Timer();
myTimer.Interval =1000;
myTimer.Enabled = true;
myTimer.Tick += new EventHandler(myTimer_Tick);
}
private void myTimer_Tick(object sender, EventArgs e)
{
this.Invalidate();
}
private Timer myTimer;//定义时钟,定时重新绘制
private Graphics g;//创建画布
private Pen pen;//创建画笔
private int width;//画布高度
private int height;//画布宽度
Color hourColor = Color.Red;
/// <summary>
/// 时钟颜色
/// </summary>
[CategoryAttribute("颜色"), Description("时钟颜色")]
public Color HourColor
{
get { return hourColor; }
set { hourColor=value; }
}
Color minuteColor = Color.Green;
/// <summary>
/// 分钟颜色
/// </summary>
[CategoryAttribute("颜色"), Description("分钟颜色")]
public Color MinuteColor
{
get { return minuteColor; }
set { minuteColor = value; }
}
Color secondColor = Color.Blue;
/// <summary>
/// 秒钟颜色
/// </summary>
[CategoryAttribute("颜色"), Description("秒钟颜色")]
public Color SecondColor
{
get { return secondColor; }
set { secondColor = value; }
}
Color bigScaleColor = Color.DarkGreen;
/// <summary>
/// 大刻度颜色
/// </summary>
[CategoryAttribute("颜色"), Description("大刻度颜色")]
public Color BigScaleColor
{
get { return bigScaleColor; }
set { bigScaleColor = value; }
}
Color litterScaleColor = Color.Olive;
/// <summary>
/// 小刻度颜色
/// </summary>
[CategoryAttribute("颜色"), Description("小刻度颜色")]
public Color LitterScaleColor
{
get { return litterScaleColor; }
set { litterScaleColor = value; }
}
Color textColor = Color.White;
/// <summary>
/// 刻度值颜色
/// </summary>
[CategoryAttribute("颜色"), Description("刻度值颜色")]
public Color TextColor
{
get { return textColor; }
set { textColor = value; }
}
Color bigBackColor = Color.Black;
/// <summary>
/// 外圆背景色
/// </summary>
[CategoryAttribute("颜色"), Description("外圆背景颜色")]
public Color BigBackColor
{
get { return bigBackColor; }
set { bigBackColor = value; }
}
Color litterBackColor = Color.White;
/// <summary>
/// 内圆颜色
/// </summary>
[CategoryAttribute("颜色"), Description("内圆颜色")]
public Color LitterBackColor
{
get { return litterBackColor; }
set { litterBackColor = value; }
}
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
g = e.Graphics;
g.SmoothingMode = SmoothingMode.AntiAlias; //
g.SmoothingMode = SmoothingMode.HighQuality;//绘图模式 默认为粗糙模式,将会出现锯齿!
width = this.Width;//时钟宽度
height = this.Height;//时钟高度
int x1 = 0;//开始绘制时钟起点X坐标
int y1 = 0;//开始绘制时钟起点Y坐标
/*------------------------------------------------------------------------------
计算:整点刻度12个,每个刻度偏移角度为360/12 = 30 度 及为小时偏移角度
分秒刻度为60个,每个刻度偏移角度为360/60 = 6 度 及为分、秒偏移角度
--------------------------------------------------------------------------------*/
g.FillEllipse(new SolidBrush( bigBackColor), x1 + 2, y1 + 2, width - 4, height - 4); //外圆
pen = new Pen(new SolidBrush(litterBackColor), 2);
g.DrawEllipse(pen, x1 + 7, y1 + 7, width - 13, height - 13);// 内圆
g.TranslateTransform(x1 + (width / 2), y1 + (height / 2));//重新设置坐标原点
g.FillEllipse(Brushes.White, -5, -5, 10, 10);//绘制表盘中心
for (int x = 0; x < 60; x++) //小刻度
{
g.FillRectangle(new SolidBrush(litterScaleColor), new Rectangle(-2, (System.Convert.ToInt16(height - / 2 - 2) * (-1), 3, 10));
g.RotateTransform(6);//偏移角度
}
for (int i = 12; i > 0; i--) //大刻度
{
string myString = i.ToString();
//绘制整点刻度
g.FillRectangle(new SolidBrush(bigScaleColor), new Rectangle(-3, (System.Convert.ToInt16(height - / 2 - 2) * (-1), 6, 20));
//绘制数值
g.DrawString(myString, new Font(new FontFamily("Times New Roman"),14, FontStyle.Bold, GraphicsUnit.Pixel),new SolidBrush( textColor), new PointF(myString.Length * (-6), (height - / -2 + 26));
//顺时针旋转30度
g.RotateTransform(-30);//偏移角度
}
//获得系统时间值
int second = DateTime.Now.Second;
int minute = DateTime.Now.Minute;
int hour = DateTime.Now.Hour;
/*------------------------------------------------------------------------------------
每秒偏移6度,秒针偏移=当前秒*6
每分偏移6读,分针偏移 = 当前分*6+当前秒*(6/60)
每小时偏移60读,时针偏移 = 当前时*30+当前分*(6/60)+当前秒*(6/60/60)
--------------------------------------------------------------------------------------*/
//绘秒针
pen = new Pen(secondColor, 1);
pen.EndCap = LineCap.ArrowAnchor;
g.RotateTransform(6 * second);
float y = (float)((-1) * (height / 2.75));
g.DrawLine(pen, new PointF(0, 0), new PointF((float)0, y));
////绘分针
pen = new Pen(minuteColor, 4);
pen.EndCap = LineCap.ArrowAnchor;
g.RotateTransform(-6 * second); //恢复系统偏移量,再计算下次偏移
g.RotateTransform((float)(second * 0.1 + minute * 6));
y = (float)((-1) * ((height - 30) / 2.75));
g.DrawLine(pen, new PointF(0, 0), new PointF((float)0, y));
////绘时针
pen = new Pen(hourColor, 6);
pen.EndCap = LineCap.ArrowAnchor;
g.RotateTransform((float)(-second * 0.1 - minute * 6));//恢复系统偏移量,再计算下次偏移
g.RotateTransform((float)(second * 0.01 + minute * 0.1 + hour * 30));
y = (float)((-1) * ((height - 45) / 2.75));
g.DrawLine(pen, new PointF(0, 0), new PointF((float)0, y));
}
}
}
发表评论
-
怎样提高WebService的性能
2015-02-03 13:51 1807服务器端WebService程序: using Syste ... -
ASP.net网站性能提高办法 无意中从网上浏览到了一篇提高网站性能的帖子转来学习下。
2015-01-16 13:42 513ASP.net网站性能提高办法 无意中从网上浏览到了一篇提高网 ... -
asp.net创建缩略图
2015-01-16 12:01 375记录一个保存缩略图通用的函数。 + View C ... -
让ADO.NET Entity Framework支持Oracle数据库 好东西收藏了
2015-01-16 11:35 509项目需要基于.NET平台,个人的习惯是能用微软自带的就不用第三 ... -
使用SqlBulkCopy导入大数据要注意
2015-01-13 14:17 571第一次用挺好,第二次就出问题了:我的表里边已经有数据,而且加了 ... -
不要让你的错误处理把错误给吃了,千万注意不然费时费力
2015-01-13 10:48 588开发中老鸟总是说你的程序怎么不够友好,都不加错误处理,给用户报 ... -
用微软提供的批量把数据导入到数据库方法SqlBulkCopy真是好用好快
2015-01-13 09:59 2596平时老是碰到把一批数据插入到数据库。通常的办法是循环一条条插进 ... -
SQL Server类型与C#类型对应关系 好东西收藏了
2015-01-13 09:14 1567SQL Server类型 C#类型 bit bool tiny ... -
asp.net 中URL 编码窗体数据无效提示错误处理记录
2015-01-12 15:50 770一个系统,其他用户都没有问题,就是一个用户说报错 后来查 ... -
CSV文件转换类
2015-01-12 13:01 822/// <summary> /// ... -
最全的日期年农历假日节气星座等计算类封装
2015-01-12 09:27 556/// <summary> /// 农历属 ... -
用调用浏览器打印页面1
2015-01-12 08:08 722<!--media=print 这个属性可以在打印时有效 ... -
C#检验数据有效性验证类
2015-01-09 12:46 827using System; using System.Text ... -
Asp.net事假的执行顺序,非常重要这个算是高级编程部分
2015-01-09 09:47 744ASP.NET 母版页和内容页中的事件 母版页和内容页都可以 ... -
用NPOI把数据库内容导入到Excel中实例(NPOI版本2.0)
2015-01-08 14:30 610注意 [url=http://dl.iteye.com/top ... -
开发中货币样式看似简单,没弄过的往往花费比较长时间,本人处理了,贴出来大家分享,也方便自己以后查用
2015-01-08 11:00 494开发中货币样式看似简单,没弄过的往往花费比较长时间,本人处理了 ... -
写流文件的方式把页面中的数据导到Excel的终极代码
2015-01-06 11:12 1130在开发一个小项目的时候,当时说功能简单,但是要实现数据导出功 ...
相关推荐
在本文中,我们将深入探讨如何使用C#编程语言与GDI+库来创建一个功能完备且无闪烁的简单时钟应用程序。GDI+是.NET框架的一部分,它为开发者提供了丰富的图形绘制功能,使得创建视觉元素如时钟变得更加简单。 1. **...
本主题将深入探讨如何使用C#的GDI+来绘制一个动态更新的时钟。 首先,我们需要理解GDI+的基本概念。GDI+提供了一系列的类和方法,如`Graphics`、`Pen`、`SolidBrush`等,用于绘制线条、形状、文本和图像。在C#中,...
在本文中,我们将深入探讨如何使用C#编程语言和GDI(Graphics Device Interface)库来创建一个动态时钟。GDI是.NET Framework提供的一种低级图形绘制机制,它允许程序员直接控制屏幕上的像素,实现复杂的图形和文本...
在.NET Framework中,C#提供了一种强大的图形接口——GDI+(Graphics Device Interface Plus),用于在Windows应用程序中创建和处理图形元素。本教程将深入探讨如何利用GDI+来扩展标准的ToolTip控件,使其拥有更丰富...
现在使用的还是XP的系统,每次看到数字显示的时钟总是不直观,于是做了一个仿Win7效果的桌面时钟,表盘使用的是图片,美工好的朋友可以自己换一个表盘背景。 代码只有一百多行(主要是画表针),适合新接触GDI+的朋友...
精美的时钟,看效果请看上一条,有编译好的文件,此为源码
本文将探讨如何使用C#和GDI+创建一个简单的时钟应用程序。这个时钟将实时显示当前的时间,包括小时、分钟和秒针。以下是关键代码的解释: 1. 首先,我们定义了一些必要的变量,如`center`表示时钟圆心的坐标,`r`...
总结,通过结合C#的GDI+和Timer控件,我们可以轻松地创建一个实时更新的时钟。GDI+为我们提供了绘制图形的能力,而Timer控件则负责定期执行更新任务。这种方法不仅可以用于创建时钟,还可以应用于其他需要周期性刷新...
在本文中,我们将深入探讨...通过以上步骤,我们可以构建一个功能完善的C#小时钟程序,利用GDI+的绘图能力,不仅展示时间,还可以展示出程序员的创新设计。这个项目不仅锻炼了C#编程技能,也加深了对GDI+图形库的理解。
本项目是基于C#和GDI+开发的一个简单时钟应用,对于初学者来说,这是一个很好的实践项目,可以学习到如何在C#环境中利用GDI+进行图形界面的设计和实时数据更新。 首先,我们需要理解C#窗体应用程序的基本结构。在...
这是 Visual C++ 典型模块与项目实战大全 清华大学出版社 第12章 扫雷游戏(定时器+GDI+数字时钟) 源码,为了防止光盘丢失,特存于此。
在本文中,我们将深入探讨如何使用C#编程语言与GDI+图形库来实现一个功能齐全的钟表程序。GDI+(Graphics Device Interface Plus)是.NET Framework提供的一种强大的图形处理技术,它允许开发者创建丰富的图形用户...
通过以上步骤,你可以创建出一个自定义的C#时钟或秒表应用,利用GDI+的强大功能展示动态的图形效果。同时,这也为你打开了通向更多复杂图形编程的大门,如动画、图表等。不断实践和学习,你将能够更好地掌握C#的图像...
GDI+(Graphics Device Interface Plus)是Windows操作系统中用于图形绘制和处理的API,它扩展了...对于学习C#和GDI+的开发者来说,这是一个很好的实践案例,可以深入理解图形绘制、窗口定制以及接口设计等多个方面。
在C# .NET环境中,GDI+(Graphics Device Interface Plus)是一个强大的图形处理库,用于创建和操作2D图形。本篇文章将详细讲解如何利用C# GDI+来实现一个钟表,使得秒针、分针和时针能够随着时间的流逝而同步转动。...
在本文中,我们将深入探讨如何在C#编程环境中创建一个具有半透明效果的时钟控件。这个项目源码提供了一个独特的用户界面元素,它不仅可以显示时间,而且通过使用半透明设计,为应用程序增添了现代感和优雅感。下面,...
在本项目“Gdi+时钟,有源码 MyClockMyClock”中,我们将会探讨如何使用GDI+来创建一个实时显示时间的自定义时钟应用程序。 首先,GDI+的核心在于它的绘图对象,如Pen、Brush、Font和Image等,这些对象使得开发者...
【GDI-电子时钟】是一个使用GDI(Graphics Device Interface)技术在C#编程语言中实现的简单电子时钟程序。GDI是Windows应用程序中用于绘制图形、文本和其他可视元素的基本接口。在这个项目中,开发者利用GDI的绘图...
【标题】"C#精美时钟(无资源文件纯GDI制作)"是一个使用C#编程语言,基于GDI+图形接口开发的时钟程序。这个程序的独特之处在于它没有依赖任何外部资源文件,而是完全利用了.NET Framework 2.0或更高版本提供的功能来...
综上所述,"C#仪表盘、时钟"项目涵盖了C#编程中的多个核心概念和技术,包括自定义控件开发、图形绘制、数据绑定、线程安全、事件处理、动画实现、单位转换、布局设计、设计模式以及测试与调试。通过这个项目,开发者...