📄 form2.cs
字号:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Reflection;
using System.IO;
using PlatformAPI;
namespace LedClock
{
public partial class Form2 : Form
{
static string path = "";
static IImagingFactory factory;
Graphics gxBuffer;
Bitmap offBitmap;
//Graphics gxClock;
Graphics gxC;
Bitmap mClock;
string skin = "bg_Vista_flower";
public Form2()
{
InitializeComponent();
path = System.IO.Path.GetDirectoryName(Assembly.GetExecutingAssembly().GetName().CodeBase);
factory = (IImagingFactory)Activator.CreateInstance(Type.GetTypeFromCLSID(new Guid("327ABDA8-072B-11D3-9D7B-0000F81EF32E")));
offBitmap = new Bitmap(234, 60);
gxBuffer = Graphics.FromImage(offBitmap);
gxBuffer.Clear(this.BackColor);
mClock = new Bitmap(130, 130);
gxC = Graphics.FromImage(mClock);
gxC.Clear(this.BackColor);
}
public static IImage GetImage(string num)
{
IImage image;
try
{
//factory.CreateImageFromFile(path + @"\Led\" + num + ".png", out image);
MemoryStream strm = (MemoryStream)Assembly.GetExecutingAssembly().GetManifestResourceStream("LedClock.Led." + num + ".png");
byte[] pbBuf = strm.GetBuffer();
uint cbBuf = (uint)strm.Length;
factory.CreateImageFromBuffer(pbBuf, cbBuf, BufferDisposalFlag.BufferDisposalFlagNone, out image);
return image;
}
catch
{
//MessageBox.Show(num);
return null;
}
}
private void Form2_Load(object sender, EventArgs e)
{
}
private void Form2_Paint(object sender, PaintEventArgs e)
{
}
private void timer1_Tick(object sender, EventArgs e)
{
gxBuffer.Clear(this.BackColor);
IntPtr hdcDest = gxBuffer.GetHdc();
try
{
Rectangle dstRect = new Rectangle(0, 0, 234, 60);
GetImage("11").Draw(hdcDest, ref dstRect, IntPtr.Zero);
gxBuffer.ReleaseHdc(hdcDest);
DateTime now = DateTime.Now;
string hour = now.Hour.ToString();
string minute = now.Minute.ToString();
string second = now.Second.ToString();
label1.Text = now.ToLongTimeString();
if (hour.Length == 1)
{
hdcDest = gxBuffer.GetHdc();
dstRect = new Rectangle(10, 0, 36, 60);
GetImage("0").Draw(hdcDest, ref dstRect, IntPtr.Zero);
gxBuffer.ReleaseHdc(hdcDest);
hdcDest = gxBuffer.GetHdc();
dstRect = new Rectangle(36, 0, 62, 60);
GetImage(hour).Draw(hdcDest, ref dstRect, IntPtr.Zero);
gxBuffer.ReleaseHdc(hdcDest);
}
else
{
hdcDest = gxBuffer.GetHdc();
dstRect = new Rectangle(10, 0, 36, 60);
GetImage(hour.Substring(0, 1)).Draw(hdcDest, ref dstRect, IntPtr.Zero);
gxBuffer.ReleaseHdc(hdcDest);
hdcDest = gxBuffer.GetHdc();
dstRect = new Rectangle(36, 0, 62, 60);
GetImage(hour.Substring(1, 1)).Draw(hdcDest, ref dstRect, IntPtr.Zero);
gxBuffer.ReleaseHdc(hdcDest);
}
hdcDest = gxBuffer.GetHdc();
dstRect = new Rectangle(62, 0, 69, 60);
GetImage("10").Draw(hdcDest, ref dstRect, IntPtr.Zero);
gxBuffer.ReleaseHdc(hdcDest);
if (minute.Length == 1)
{
hdcDest = gxBuffer.GetHdc();
dstRect = new Rectangle(69, 0, 95, 60);
GetImage("0").Draw(hdcDest, ref dstRect, IntPtr.Zero);
gxBuffer.ReleaseHdc(hdcDest);
hdcDest = gxBuffer.GetHdc();
dstRect = new Rectangle(95, 0, 121, 60);
GetImage(minute).Draw(hdcDest, ref dstRect, IntPtr.Zero);
gxBuffer.ReleaseHdc(hdcDest);
}
else
{
hdcDest = gxBuffer.GetHdc();
dstRect = new Rectangle(69, 0, 95, 60);
GetImage(minute.Substring(0, 1)).Draw(hdcDest, ref dstRect, IntPtr.Zero);
gxBuffer.ReleaseHdc(hdcDest);
hdcDest = gxBuffer.GetHdc();
dstRect = new Rectangle(95, 0, 121, 60);
GetImage(minute.Substring(1, 1)).Draw(hdcDest, ref dstRect, IntPtr.Zero);
gxBuffer.ReleaseHdc(hdcDest);
}
hdcDest = gxBuffer.GetHdc();
dstRect = new Rectangle(121, 0, 128, 60);
GetImage("10").Draw(hdcDest, ref dstRect, IntPtr.Zero);
gxBuffer.ReleaseHdc(hdcDest);
if (second.Length == 1)
{
hdcDest = gxBuffer.GetHdc();
dstRect = new Rectangle(128, 0, 154, 60);
GetImage("0").Draw(hdcDest, ref dstRect, IntPtr.Zero);
gxBuffer.ReleaseHdc(hdcDest);
hdcDest = gxBuffer.GetHdc();
dstRect = new Rectangle(154, 0, 180, 60);
GetImage(second).Draw(hdcDest, ref dstRect, IntPtr.Zero);
gxBuffer.ReleaseHdc(hdcDest);
}
else
{
hdcDest = gxBuffer.GetHdc();
dstRect = new Rectangle(128, 0, 154, 60);
GetImage(second.Substring(0, 1)).Draw(hdcDest, ref dstRect, IntPtr.Zero);
gxBuffer.ReleaseHdc(hdcDest);
hdcDest = gxBuffer.GetHdc();
dstRect = new Rectangle(154, 0, 180, 60);
GetImage(second.Substring(1, 1)).Draw(hdcDest, ref dstRect, IntPtr.Zero);
gxBuffer.ReleaseHdc(hdcDest);
}
gxBuffer.DrawImage(offBitmap, 0, 0);
pictureBox1.Image = offBitmap;
}
catch (Exception ex)
{
gxBuffer.ReleaseHdc(hdcDest);
timer1.Enabled = false;
button1.Enabled = true;
//MessageBox.Show(ex.ToString());
}
}
public static IImage GetClockImage(string str)
{
IImage image;
try
{
//factory.CreateImageFromFile(path + @"\Clock\" + str + ".png", out image);
MemoryStream strm = (MemoryStream)Assembly.GetExecutingAssembly().GetManifestResourceStream("LedClock.Clock."+str+".png");
byte[] pbBuf = strm.GetBuffer();
uint cbBuf = (uint)strm.Length;
factory.CreateImageFromBuffer(pbBuf, cbBuf, BufferDisposalFlag.BufferDisposalFlagNone, out image);
return image;
}
catch
{
//MessageBox.Show(num);
return null;
}
}
private void timer2_Tick(object sender, EventArgs e)
{
gxC.Clear(this.BackColor);
IntPtr hdcDest = gxC.GetHdc();
try
{
Rectangle dstRect = new Rectangle(0, 0, 130, 130);
GetClockImage(skin).Draw(hdcDest, ref dstRect, IntPtr.Zero);
gxC.ReleaseHdc(hdcDest);
DateTime now = DateTime.Now;
int iHour = now.Hour;
string minute = now.Minute.ToString();
int iMinute = now.Minute;
string second = now.Second.ToString();
label1.Text = now.ToLongTimeString();
if (iHour > 12)
{
iHour = iHour - 12;
}
if (iHour == 0)
{
iHour = 12;
}
iMinute = iMinute / 12;
hdcDest = gxC.GetHdc();
dstRect = new Rectangle(0, 0, 130, 130);
GetClockImage("h_" + iHour.ToString() + iMinute.ToString()).Draw(hdcDest, ref dstRect, IntPtr.Zero);
gxC.ReleaseHdc(hdcDest);
hdcDest = gxC.GetHdc();
dstRect = new Rectangle(0, 0, 130, 130);
GetClockImage("m_" + minute).Draw(hdcDest, ref dstRect, IntPtr.Zero);
gxC.ReleaseHdc(hdcDest);
hdcDest = gxC.GetHdc();
dstRect = new Rectangle(0, 0, 130, 130);
GetClockImage("s_" + second).Draw(hdcDest, ref dstRect, IntPtr.Zero);
gxC.ReleaseHdc(hdcDest);
gxC.DrawImage(mClock, 0, 0);
pictureBox2.Image = mClock;
}
catch (Exception ex)
{
gxC.ReleaseHdc(hdcDest);
timer2.Enabled = false;
button2.Enabled = true;
//MessageBox.Show(ex.ToString());
}
}
private void radioButton1_CheckedChanged(object sender, EventArgs e)
{
RadioButton rd = (RadioButton)sender;
if (rd.Checked)
{
skin = "bg_" + rd.Text;
}
}
private void menuItem1_Click(object sender, EventArgs e)
{
this.Close();
}
private void button1_Click(object sender, EventArgs e)
{
this.Refresh();
timer1.Enabled = true;
button1.Enabled = false;
}
private void button2_Click(object sender, EventArgs e)
{
this.Refresh();
timer2.Enabled = true;
button2.Enabled = false;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -