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
} }
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控件
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/37767.html