ie9类似于winforms中的按钮热跟踪
本文关键字:按钮 跟踪 类似于 winforms ie9 | 更新日期: 2023-09-27 18:18:55
我有一个类,目前在正常和鼠标悬停状态的2个图像之间切换,但我想添加一个微妙的动画,在2之间切换。
是否有任何(简单)的方式有一个按钮动画从一个图像到下一个,如按钮在ie9浏览器?
编辑:这是我用于OnPaint过载的最终解决方案,感谢joe_coolish的回答
protected override void OnPaint(PaintEventArgs e)
{
e.Graphics.DrawImage(_normalImage, 0, 0);
ColorMatrix matrix = new ColorMatrix();
matrix.Matrix33 = _opacity;
ImageAttributes attributes = new ImageAttributes();
attributes.SetColorMatrix(matrix, ColorMatrixFlag.Default, ColorAdjustType.Bitmap);
e.Graphics.DrawImage(_hotImage, this.DisplayRectangle, 0, 0,
this.DisplayRectangle.Width, this.DisplayRectangle.Height, GraphicsUnit.Pixel, attributes);
if (_opacity < 1 && _over)
{
_opacity += 0.02f;
_opacity = Math.Min(1, _opacity);
this.Invalidate();
}
if (_opacity > 0 && !_over)
{
_opacity -= 0.02f;
_opacity = Math.Max(0, _opacity);
this.Invalidate();
}
}
我最终不得不防止不透明度设置为大于1或小于0,否则我最终会有一些奇怪的行为。
注意:同样重要的是要确保控件是双缓冲的,否则会有不好的闪烁。
this.SetStyle(ControlStyles.OptimizedDoubleBuffer, true);
图片有何不同?如果你想要一个"淡入/淡出"类型的东西,试着这样做:
private float _opacity = 0.0f;
private bool _over = false;
protected override void OnPaint(PaintEventArgs e)
{
e.Graphics.DrawImage(imgOne);
ColorMatrix matrix = new ColorMatrix();
matrix.Matrix33 = _opacity; //opacity 0 = completely transparent, 1 = completely opaque
ImageAttributes attributes = new ImageAttributes();
attributes.SetColorMatrix(matrix, ColorMatrixFlag.Default, ColorAdjustType.Bitmap);
e.Graphics.DrawImage(imgTwo, new Rectangle(0, 0, imgTwo.Width, imgTwo.Height), 0, 0, imgTwo.Width, imgTwo.Height, GraphicsUnit.Pixel, attributes);
if(_opacity < 1 && _over)
{
_opacity += 0.05f; // Play with this!!
Invalidate();
}
if(_opacity > 0 && !_over)
{
_opacity -= 0.05f; // Play with this!!
Invalidate();
}
}
然后在鼠标进出时设置_over
bool !
这是一组非常粗糙的代码,并且IDK如果它甚至可以编译,但这是一个很好的起点!