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);

ie9类似于winforms中的按钮热跟踪

图片有何不同?如果你想要一个"淡入/淡出"类型的东西,试着这样做:

    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如果它甚至可以编译,但这是一个很好的起点!