zoukankan      html  css  js  c++  java
  • WinForm桌面下雪源码

    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控件
  • 相关阅读:
    Cobbler学习之一--Fedora17下配置Cobbler安装环境
    linux下 tar解压 gz解压 bz2等各种解压文件使用方法
    linux性能检测工具
    firefox的plugin-container进程关闭方法
    部署额外域控制器,Active Directory
    利用yum下载软件包的三种方法
    HP iLo2 试用序列号
    (转)Linux下root密码丢失和运行级别错误的解决办法
    linux下的5个查找命令
    (转)CentOs上配置samba服务
  • 原文地址:https://www.cnblogs.com/wuhuisheng/p/1788726.html
Copyright © 2011-2022 走看看