首先看特效
- 开启双缓冲
cs
SetStyle(
ControlStyles.ResizeRedraw
| ControlStyles.DoubleBuffer
| ControlStyles.UserPaint
| ControlStyles.AllPaintingInWmPaint
| ControlStyles.SupportsTransparentBackColor,
true
);
2.设置窗体透明、鼠标穿透、窗体置顶
cs
this.TransparencyKey = this.BackColor = System.Drawing.SystemColors.Control;
this.TopMost = true;
3.设置定时器
cs
_timer = new System.Timers.Timer();
_timer.Elapsed += _timer_Elapsed;
_timer.Interval = 140;
_timer.Start();
4.设置图像
5.添加窗体Paint事件
cs
private void FrmEffects_Paint(object? sender, PaintEventArgs e)
{
e.Graphics.Smooth();
_effects?.Draw(e.Graphics);
e.Graphics.Smooth(false);
}
窗体全部源码:
cs
public partial class FrmEffects : Form
{
private readonly System.Timers.Timer _timer;
private readonly IEffects _effects;
public FrmEffects()
{
InitializeComponent();
SetStyle(
ControlStyles.ResizeRedraw
| ControlStyles.DoubleBuffer
| ControlStyles.UserPaint
| ControlStyles.AllPaintingInWmPaint
| ControlStyles.SupportsTransparentBackColor,
true
);
this.TransparencyKey = this.BackColor = System.Drawing.SystemColors.Control;
this.TopMost = true;
_effects = new DragonHorseEffects();
_timer = new System.Timers.Timer();
_timer.Elapsed += _timer_Elapsed;
_timer.Interval = 140;
_timer.Start();
this.Paint += FrmEffects_Paint;
this.SizeChanged += FrmEffects_SizeChanged;
this.MouseMove += FrmEffects_MouseMove;
this.MouseUp += FrmEffects_MouseUp;
this.MouseDown += FrmEffects_MouseDown;
this.SizeChanged += FrmEffects_SizeChanged;
this.Shown += FrmEffects_Shown;
this.FormClosing += FrmEffects_FormClosing;
}
private void FrmEffects_FormClosing(object? sender, FormClosingEventArgs e)
{
_effects?.Dispose();
}
private void FrmEffects_Shown(object? sender, EventArgs e)
{
Screen screen = Screen.PrimaryScreen;
this.Location = new System.Drawing.Point(screen.Bounds.Width - this.Width, screen.Bounds.Height - this.Height - 50);
}
private void _timer_Elapsed(object? sender, System.Timers.ElapsedEventArgs e)
{
_effects?.Business();
this.Invalidate();
}
private void FrmEffects_SizeChanged(object? sender, EventArgs e)
{
}
private void FrmEffects_MouseDown(object? sender, MouseEventArgs e)
{
}
private void FrmEffects_MouseUp(object? sender, MouseEventArgs e)
{
}
private void FrmEffects_MouseMove(object? sender, MouseEventArgs e)
{
}
private void FrmEffects_Load(object sender, EventArgs e)
{
}
private void FrmEffects_Paint(object? sender, PaintEventArgs e)
{
e.Graphics.Smooth();
_effects?.Draw(e.Graphics);
e.Graphics.Smooth(false);
}
}