用.net GDI+制作时钟

本文介绍如何使用C#和GDI+技术创建一个简单但实用的时钟程序。通过具体代码示例展示了如何绘制时针、分针和秒针,以及如何实时更新时间。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

GDI+ 是 Windows XP 操作系统中提供二维矢量图形、图像处理和版式的部分。GDI+ 在 GDI(较早版本的 Windows 中提供的 Graphics Device Interface)的基础上进行了改进,添加了新功能并优化了现有功能。

利用GDI+可以很方面的画图绘图,并且也能很方便地操作图形数据。下面本人以一个简单的例子来展示如果用C#和GDI+来制作一个时钟。

运行结果如下:

程序代码如下:

usingSystem;
usingSystem.Collections.Generic;
usingSystem.ComponentModel;
usingSystem.Data;
usingSystem.Drawing;
usingSystem.Drawing.Drawing2D;
usingSystem.Drawing.Imaging;
usingSystem.Text;
usingSystem.Threading;
usingSystem.Windows.Forms;

namespaceClock
{
publicpartialclassMainForm:Form
{
privatePointFcenter;
privatefloatr;
privatePenhourPen;
privatePenminutePen;
privatePensecondPen;
privateThreadtimeThread;

publicMainForm()
{
InitializeComponent();
ShowInTaskbar
=false;//不在任务栏中显示
SetStyle(ControlStyles.DoubleBuffer,true);
SetStyle(ControlStyles.UserPaint,
true);
SetStyle(ControlStyles.AllPaintingInWmPaint,
true);

center
=newPointF(ClientSize.Width/2.0f,ClientSize.Height/2.0f);
r
=Math.Min(ClientSize.Width/2.0f,ClientSize.Height/2.0f);
hourPen
=newPen(Color.Black,2.5f);
minutePen
=newPen(Color.Black,1.5f);
secondPen
=newPen(Color.Black,0.5f);
timeThread
=newThread(newThreadStart(DrawTime));
timeThread.Start();
}

protectedoverridevoidOnPaint(PaintEventArgse)
{
Graphicsg
=e.Graphics;
g.Clear(BackColor);
//g.SmoothingMode=SmoothingMode.AntiAlias;
g.SmoothingMode=SmoothingMode.HighQuality;
g.DrawArc(secondPen,
newRectangleF(center.X-r,center.Y-r,2*r-3,2*r-3),0,360);

GraphicsPathround
=newGraphicsPath();
round.AddArc(
newRectangleF(center.X-r,center.Y-r,2*r-3,2*r-3),0,360);
Region
=newRegion(round);

Penpen
=newPen(Color.Blue,3.0f);
for(inti=0;i<59;i++)
{
g.ResetTransform();
g.TranslateTransform(center.X,center.Y);
g.RotateTransform(i
*6);
if((i==0)||(i%5==4))
{
g.DrawLine(hourPen,r
-12,0,r-5,0);
}
else
{
g.DrawLine(secondPen,r
-6,0,r-5,0);
}
}


floathour,minute,second;
hour
=DateTime.Now.Hour;
minute
=DateTime.Now.Minute;
second
=DateTime.Now.Second;
hour
=hour+minute/60f+second/3600f;
minute
=minute+second/60f;
//画时针
g.ResetTransform();
g.TranslateTransform(center.X,center.Y);
g.RotateTransform(hour
*30+270-6);
g.DrawLine(hourPen,
0,0,r*0.5f,0f);
//画分针
g.ResetTransform();
g.TranslateTransform(center.X,center.Y);
g.RotateTransform(minute
*6+270-6);
g.DrawLine(minutePen,
0,0,r*0.6f,0f);
//画秒针
g.ResetTransform();
g.TranslateTransform(center.X,center.Y);
g.RotateTransform(second
*6+270-6);
g.DrawLine(secondPen,
0,0,r*0.7f,0f);
base.OnPaint(e);
}

privatevoidDrawTime()
{
while(true)
{
Invalidate();
Thread.Sleep(
900);//为避免某些延时影响,900ms画一次时钟指针
}
}

protectedvoidDispose(objectsender,EventArgse)
{
Dispose();
base.Dispose(Disposing);
Application.Exit();
}

privatevoidtsmExit_Click(objectsender,EventArgse)
{
Close();
Dispose();
base.Dispose(Disposing);
Application.Exit();
}
}
}
程序代码比较简单,而且也做了注释,估计大家都看得懂,我就不罗唆了。以后有时间再做难度稍大一点的例子。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值