US_video/DoubleBufferedPanel.cs

67 lines
1.8 KiB
C#

using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace videoGather
{
public class DoubleBufferedPanel : Panel
{
private Bitmap _backImage;
// 新增背景图属性
public Bitmap BackImage
{
get => _backImage;
set
{
if (_backImage != null)
{
_backImage.Dispose();
}
_backImage = value;
Invalidate(); // 触发重绘
}
}
// 构造函数
public DoubleBufferedPanel()
{
// 启用双缓冲
this.DoubleBuffered = true; // 内置支持
// 设置样式以避免闪烁
this.SetStyle(ControlStyles.OptimizedDoubleBuffer |
ControlStyles.AllPaintingInWmPaint |
ControlStyles.UserPaint, true);
}
protected override void OnPaintBackground(PaintEventArgs e)
{
// 禁用默认背景绘制(关键!)
// base.OnPaintBackground(e); // 注释掉这行
}
protected override void OnPaint(PaintEventArgs e)
{
// 绘制自定义背景图
if (_backImage != null)
{
e.Graphics.DrawImage(_backImage, ClientRectangle);
}
base.OnPaint(e); // 保持原有绘制逻辑
}
protected override void Dispose(bool disposing)
{
if (disposing)
{
_backImage?.Dispose();
}
base.Dispose(disposing);
}
}
}