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控件
  • 相关阅读:
    Mac开发利器之程序员编辑器MacVim学习总结(转)
    FFmpeg的H.264解码器源代码简单分析
    Google推荐的图片加载库Glide
    Java集合及concurrent并发包总结(转)
    ArrayList、Vector和LinkedList等的差别与用法(基础回顾)
    应用最广泛的模式-工厂方法模式
    Android 开发 命名规范(基础回顾)
    Java线程问题(基础回顾)
    Mac下使用wireshark解决Interface为空的办法
    Express4.10.2开发框架中默认app.js的代码注释
  • 原文地址:https://www.cnblogs.com/wuhuisheng/p/1788726.html
Copyright © 2011-2022 走看看