当前位置:系统粉 >  系统教程 > 电脑软件教程 >  电脑桌面下雪的使用方法

电脑桌面下雪的使用方法

时间: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

我要分享:
版权信息

Copyright @ 2011 系统粉 版权声明 最新发布内容 网站导航