时间:2015-04-16 来源:互联网 浏览量:
完整版本,下雪了
C# code
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using System.Reflection;
using System.Threading;
namespace WindowsApplication30
{
public partial class frmDesktopSnow : Form
{
/// <summary>
/// 下雪啦
/// </summary>
[DllImport("User32.dll ", EntryPoint = "FindWindow")]
static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
[DllImport("User32.dll ")]
static extern IntPtr FindWindowEx(IntPtr parent, IntPtr childe, string strclass, string strname);
List<Point> SnowPoints = new List<Point>();
List<int> SnowRate = new List<int>();
Bitmap Bmp = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height);
IntPtr DesktopHandle = IntPtr.Zero;
#region public frmDesktopSnow() // 构造函数
/// <summary>
/// 构造函数
/// </summary>
public frmDesktopSnow()
{
InitializeComponent();
this.FormBorderStyle = FormBorderStyle.None;
BtnStart.Size = new Size(100, 70);
BtnClose.Size = new Size(100, 70);
BtnStart.Location = new Point(0, 0);
BtnClose.Location = new Point(101, 0);
BtnStart.Text = "点一下吧";
BtnClose.Text = "关闭";
this.Size = new Size(BtnClose.Right, BtnClose.Bottom);
this.Opacity = 0.8;
}
#endregion
#region void SnowTimer_Tick(object sender, EventArgs e) // 下雪计时器事件
/// <summary>
/// 下雪计时器事件
/// </summary>
/// <param name="sender">计时器本身</param>
/// <param name="e">计时器参数</param>
void SnowTimer_Tick(object sender, EventArgs e)
{
Graphics DesktopGraphics = Graphics.FromHwnd(DesktopHandle);
String Text = "圣诞快到了,希望大家身体健康!";
if (Convert.ToInt32(SnowTimer.Tag) == 0)
DesktopGraphics.DrawString(Text, new Font("宋体", 10), new SolidBrush(Color.Red),
new PointF(Screen.PrimaryScreen.Bounds.Width / 2 - 200, Screen.PrimaryScreen.Bounds.Height / 2));
else
DesktopGraphics.DrawString(Text, new Font("宋体", 10), new SolidBrush(Color.Green),
new PointF(Screen.PrimaryScreen.Bounds.Width / 2 - 200, Screen.PrimaryScreen.Bounds.Height / 2));
SnowTimer.Tag = 1 - Convert.ToInt32(SnowTimer.Tag);
for (int i = 0; i < SnowPoints.Count; i++)
{
DesktopGraphics.DrawImage(Bmp, SnowPoints[i].X, SnowPoints[i].Y, new Rectangle(SnowPoints[i], PbSnow.Size),
GraphicsUnit.Pixel);
SnowPoints[i] = new Point(SnowPoints[i].X, SnowPoints[i].Y + SnowRate[i]);
if (SnowPoints[i].Y > Screen.PrimaryScreen.Bounds.Bottom)
SnowPoints[i] = new Point(SnowPoints[i].X, 0);
DesktopGraphics.DrawImage(PbSnow.Image, SnowPoints[i]); // PbSnow.Image 小雪花图片
}
DesktopGraphics.Dispose();
}
#endregion
#region void BtnStart_Click(object sender, EventArgs e) // 下雪
/// <summary>
/// 开始下雪
/// </summary>
/// <param name="sender">按钮本身</param>
/// <param name="e">按钮</param>
void BtnStart_Click(object sender, EventArgs e)
{
SnowPoints.Clear();
Random R = new Random();
for (int i = 0; i < 50; i++)
{
SnowPoints.Add(new Point(R.Next(Screen.PrimaryScreen.Bounds.Width),
R.Next(Screen.PrimaryScreen.Bounds.Height)));
SnowRate.Add(R.Next(10));
}
ShowDesktop();
this.WindowState = FormWindowState.Minimized;
Thread.Sleep(500); // 等待桌面完全显示
Graphics G = Graphics.FromImage(Bmp);
G.CopyFromScreen(new Point(0, 0), new Point(Screen.PrimaryScreen.Bounds.Left, Screen.PrimaryScreen.Bounds.Top),
new Size(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height));
G.Dispose();
this.WindowState = FormWindowState.Normal;
IntPtr P = FindWindow("Progman", "Program Manager");
P = FindWindowEx(P, IntPtr.Zero, "SHELLDLL_DefView", null);
DesktopHandle = FindWindowEx(P, IntPtr.Zero, "SysListView32", null);
SnowTimer.Interval = 1;
SnowTimer.Enabled = true; // 开始下雪
}
#endregion
#region void BtnClose_Click(object sender, EventArgs e) // 关闭
/// <summary>
/// 关闭
/// </summary>
/// <param name="sender">窗口本身</param>
/// <param name="e">窗口参数</param>
void BtnClose_Click(object sender, EventArgs e)
{
ShowDesktop();
Close();
}
#endregion
#region static void ShowDesktop() // 显示桌面
/// <summary>
/// 显示桌面
/// </summary>
static void ShowDesktop()
{
Type OleType = Type.GetTypeFromProgID("Shell.Application");
object OleObject = System.Activator.CreateInstance(OleType);
OleType.InvokeMember("ToggleDesktop", BindingFlags.InvokeMethod, null, OleObject, null);
}
#endregion
}
} 小雪花图片用网上有的小雪花矢量图jpg或bmp用photoshop把背景颜色的区域删掉镂空成透明保存成GIF然后导入PbSnow PictureBox