zoukankan      html  css  js  c++  java
  • 重写OnPaint事件对窗体重绘(显示gif动画) 实例2

        /// <summary>
        /// 可显示Gif  的窗体
        /// </summary>
        public class WinGif : Form
        {
            private Image _img = null;
            public Image Img
            {
                get { return _img; }
                set { _img = value; }
            }
    
            private EventHandler evtHandler = null;
            public WinGif(Image img)
            {
                //初始化设置
                evtHandler = new EventHandler(OnImageAnimate);
                this.Img = img;
                this.Width = _img.Width+100;
                this.Height = _img.Height + 100;
    
                //开始动画
                BeginAnimate();
            }
    
            //委托所关联的方法
            private void OnImageAnimate(Object sender, EventArgs e)
            {
                //该方法,只是使得当前控件重绘,调用OnPaint()
                this.Invalidate();
            }
            //设置开始动画
            public void BeginAnimate()
            {
                if (_img != null)
                {
                    //当gif动画每隔一定时间后,都会变换一帧,那么就会触发一事件
                    //该方法就是将当前image每变换一帧时,都会调用当前这个委托所关联的方法
                    ImageAnimator.Animate(_img,evtHandler);
                }
            }
            //关闭显示动画,该方法可以在窗口关闭或者某事件触发时,已停止渲染当前gif动画
            public void StopAnimate()
            {
                _img = null;
                ImageAnimator.StopAnimate(_img,evtHandler);
            }
            /// <summary>
            /// 重载的当前winform 的OnPaint方法,当界面被冲重绘制时显示gif的某一帧
            /// </summary>
            protected override void OnPaint(PaintEventArgs e)
            {
                base.OnPaint(e);
                if (_img != null)
                {
                    //获取当前gif动画下一步要渲染的帧
                    UpdateImage();
                    //将获得的当前gif动画需要渲染的帧显示在界面的某个位置
                    e.Graphics.DrawImage(_img,new Rectangle(0,0,_img.Width,_img.Height));
                }
            }
            //获得当前gif动画的下一步需要渲染的帧,当下一步任何对当前gif动画的操作都是对该帧进行操作
            private void UpdateImage()
            {
                ImageAnimator.UpdateFrames(_img);
            }
        }

    使用和结果显示:

            private void button1_Click(object sender, EventArgs e)
            {
               
                string file = Application.StartupPath + "\2.gif";
                Image img = System.Drawing.Image.FromFile(file);
    
                WinGif gif = new WinGif(img);
    
                gif.Show();
            }

  • 相关阅读:
    SQL Server Audit监控触发器状态
    SQL Server 数据变更时间戳(timestamp)在复制中的运用
    SQL Server 更改跟踪(Chang Tracking)监控表数据
    SQL Server 变更数据捕获(CDC)监控表数据
    SQL Server 事件通知(Event notifications)
    SQL Server 堆表行存储大小(Record Size)
    SQL Server DDL触发器运用
    SQL Server 默认跟踪(Default Trace)
    SQL Server 创建数据库邮件
    SQL Server 跨网段(跨机房)FTP复制
  • 原文地址:https://www.cnblogs.com/tianma3798/p/3960637.html
Copyright © 2011-2022 走看看