我有一个自定义控件,在其中重写以下方法以创建透明背景:
protected override CreateParams CreateParams
{
get
{
CreateParams cp = base.CreateParams;
cp.ExStyle |= 0x20;
return cp;
}
}
在绘画方法上,我是这样做的:
protected override void OnPaint(PaintEventArgs p)
{
base.OnPaint(p);
Graphics e = p.Graphics;
this.Size = Resources.CenterButtonHover.Size;
if (mousedown)
{
e.DrawImage(Resources.CenterButtonDown, new Point(0, 0));
}
else if (hover)
{
e.DrawImage(Resources.CenterButtonHover, new Point(0, 0));
}
else
{
e.DrawImage(Resources.CenterButtonNormal, new Point(4, 4));
}
e.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
}
并对各种鼠标事件进行了调用
this.Invalidate
正在正确渲染透明度,但每次渲染时,它都会在上一次渲染的顶部进行渲染,而不是重新绘制。这导致辉光变得越来越强烈,直到它只是一个大斑点。我该怎么解决这个问题?