用.net GDI+制作时钟
来源:互联网 发布:淘宝店一件代发流程 编辑:程序博客网 时间:2024/05/22 10:52
GDI+ 是 Windows XP 操作系统中提供二维矢量图形、图像处理和版式的部分。GDI+ 在 GDI(较早版本的 Windows 中提供的 Graphics Device Interface)的基础上进行了改进,添加了新功能并优化了现有功能。
利用GDI+可以很方面的画图绘图,并且也能很方便地操作图形数据。下面本人以一个简单的例子来展示如果用C#和GDI+来制作一个时钟。
运行结果如下:
程序代码如下:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;
using System.Text;
using System.Threading;
using System.Windows.Forms;
namespace Clock
{
public partial class MainForm : Form
{
private PointF center;
private float r;
private Pen hourPen;
private Pen minutePen;
private Pen secondPen;
private Thread timeThread;
public MainForm()
{
InitializeComponent();
ShowInTaskbar = false;//不在任务栏中显示
SetStyle(ControlStyles.DoubleBuffer, true);
SetStyle(ControlStyles.UserPaint,true);
SetStyle(ControlStyles.AllPaintingInWmPaint,true);
center = new PointF(ClientSize.Width/ 2.0f, ClientSize.Height/ 2.0f);
r = Math.Min(ClientSize.Width / 2.0f, ClientSize.Height / 2.0f);
hourPen = new Pen(Color.Black, 2.5f);
minutePen = new Pen(Color.Black, 1.5f);
secondPen = new Pen(Color.Black, 0.5f);
timeThread=new Thread(new ThreadStart(DrawTime));
timeThread.Start();
}
protected override void OnPaint(PaintEventArgs e)
{
Graphics g = e.Graphics;
g.Clear(BackColor);
//g.SmoothingMode = SmoothingMode.AntiAlias;
g.SmoothingMode = SmoothingMode.HighQuality;
g.DrawArc(secondPen, new RectangleF(center.X - r, center.Y - r, 2 * r-3, 2 * r-3), 0, 360);
GraphicsPath round = new GraphicsPath();
round.AddArc(new RectangleF(center.X - r, center.Y - r, 2 * r - 3, 2 * r - 3), 0, 360);
Region = new Region(round);
Pen pen=new Pen(Color.Blue,3.0f);
for (int i = 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);
}
}
float hour,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);
}
private void DrawTime()
{
while (true)
{
Invalidate();
Thread.Sleep(900);//为避免某些延时影响,900ms画一次时钟指针
}
}
protected void Dispose(object sender,EventArgs e)
{
Dispose();
base.Dispose(Disposing);
Application.Exit();
}
private void tsmExit_Click(object sender, EventArgs e)
{
Close();
Dispose();
base.Dispose(Disposing);
Application.Exit();
}
}
}
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;
using System.Text;
using System.Threading;
using System.Windows.Forms;
namespace Clock
{
public partial class MainForm : Form
{
private PointF center;
private float r;
private Pen hourPen;
private Pen minutePen;
private Pen secondPen;
private Thread timeThread;
public MainForm()
{
InitializeComponent();
ShowInTaskbar = false;//不在任务栏中显示
SetStyle(ControlStyles.DoubleBuffer, true);
SetStyle(ControlStyles.UserPaint,true);
SetStyle(ControlStyles.AllPaintingInWmPaint,true);
center = new PointF(ClientSize.Width/ 2.0f, ClientSize.Height/ 2.0f);
r = Math.Min(ClientSize.Width / 2.0f, ClientSize.Height / 2.0f);
hourPen = new Pen(Color.Black, 2.5f);
minutePen = new Pen(Color.Black, 1.5f);
secondPen = new Pen(Color.Black, 0.5f);
timeThread=new Thread(new ThreadStart(DrawTime));
timeThread.Start();
}
protected override void OnPaint(PaintEventArgs e)
{
Graphics g = e.Graphics;
g.Clear(BackColor);
//g.SmoothingMode = SmoothingMode.AntiAlias;
g.SmoothingMode = SmoothingMode.HighQuality;
g.DrawArc(secondPen, new RectangleF(center.X - r, center.Y - r, 2 * r-3, 2 * r-3), 0, 360);
GraphicsPath round = new GraphicsPath();
round.AddArc(new RectangleF(center.X - r, center.Y - r, 2 * r - 3, 2 * r - 3), 0, 360);
Region = new Region(round);
Pen pen=new Pen(Color.Blue,3.0f);
for (int i = 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);
}
}
float hour,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);
}
private void DrawTime()
{
while (true)
{
Invalidate();
Thread.Sleep(900);//为避免某些延时影响,900ms画一次时钟指针
}
}
protected void Dispose(object sender,EventArgs e)
{
Dispose();
base.Dispose(Disposing);
Application.Exit();
}
private void tsmExit_Click(object sender, EventArgs e)
{
Close();
Dispose();
base.Dispose(Disposing);
Application.Exit();
}
}
}
- 用.net GDI+制作时钟
- 用.net GDI+制作时钟
- 用GDI+实现的超酷时钟
- 用GDI+制作验证码!!!
- 用GDI+制作不规则窗体
- 时钟制作
- MFC用GDI+动感歌词的制作
- HTML5 用canvas制作时钟的方法
- GDI绘图之指针时钟
- GDI+ 制作透明图片
- GDI制作UI
- 用Visual C++.NET进行GDI+编程
- 用VB.NET绘制GDI图形
- 用VB.NET绘制GDI图形
- 用VB.NET绘制GDI图形
- 用Visual C++.NET进行GDI+编程
- J2ME制作一个时钟
- Flash时钟制作
- ERP-非财务人员的财务培训教(四)------公司/部门的成本与费用控制
- RemObject解决自动生成代码的想法.
- JS焦点图片变换代码
- RedHat Linux 9.0安装图解
- ERP-非财务人员的财务培训教(五)------资本结构筹划
- 用.net GDI+制作时钟
- Domino使用Java代理的注意事项
- .net C# Treeview的Node拖动,Node节点上下移动
- CSS2样式表(属性·轮廓)
- .net C# Treeview的查找node文字项
- 新的博客开张!纯属自己心得 把自己每天的收获记录下来
- BS中开发过程中的几个常用js函数
- jts学习——com.vividsolutions.jts.geom包
- paint中的Graphics从何而来?