我有一个自定义控件,我在其中覆盖以下方法来创建透明背景:
protected override CreateParams CreateParams
{
get
{
CreateParams cp = base.CreateParams;
cp.ExStyle |= 0x20;
return cp;
}
}
在paint方法上,我这样做:
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
的各种鼠标事件。
正确渲染透明度,但每次渲染透明度都会渲染到最后渲染的顶部,而不是重绘。这会使光晕变得越来越强烈,直到它只是一个大斑点。我该如何解决这个问题?
答案 0 :(得分:2)
我通过保持一个bool来解决它是否在重新绘制之前是否有需要删除的渐变。
if (needsreset)
{
this.SuspendLayout();
this.Region = new Region(this.ClientRectangle);
needsreset = false;
return;
}