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控件
  • 相关阅读:
    heat模板
    Leetcode812.Largest Triangle Area最大三角形面积
    Leetcode812.Largest Triangle Area最大三角形面积
    Leetcode811.Subdomain Visit Count子域名访问计数
    Leetcode811.Subdomain Visit Count子域名访问计数
    Leetcode806.Number of Lines To Write String写字符串需要的行数
    Leetcode806.Number of Lines To Write String写字符串需要的行数
    Leetcode819.Most Common Word最常见的单词
    Leetcode819.Most Common Word最常见的单词
    Leetcode783.Minimum Distance Between BST Nodes二叉搜索树结点最小距离
  • 原文地址:https://www.cnblogs.com/wuhuisheng/p/1788726.html
Copyright © 2011-2022 走看看