zoukankan      html  css  js  c++  java
  • 双缓冲画线示例

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Drawing;
    using System.Data;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;

    namespace WindowsFormsApplication1
    {
       
        public partial class DrawLine : UserControl
        {
            public delegate void DrawChangeDataDelegate(ref string data);

            [Description("Callback event for the ChangeData window")]
            public event DrawChangeDataDelegate DrawChangeData;
            private BufferedGraphicsContext context;
            private BufferedGraphics grafx;
            public DrawLine()
            {
                InitializeComponent();
                SetStyle(ControlStyles.UserPaint,true );
                SetStyle(ControlStyles.ResizeRedraw,true );
                SetStyle(ControlStyles.OptimizedDoubleBuffer ,true );
                context = BufferedGraphicsManager.Current;
                context.MaximumBuffer = new Size(this.Width + 1, this.Height + 1);
                grafx = context.Allocate(this.CreateGraphics(), new Rectangle(0, 0, this.Width, this.Height));
                DrawToBuffer(grafx.Graphics );
            }
            private void DrawToBuffer(Graphics g)
            {
                string data=string.Empty ;
                g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
                g.DrawLine(new Pen (Color.White ),new Point (3,3),new Point (this.Width-3,this.Height-3));
                if (DrawChangeData != null)
                    DrawChangeData(ref data);
                using (Font ft = new Font("Arial", 8f, FontStyle.Regular))
                    g.DrawString(data,ft,new SolidBrush (Color.White ),new PointF (3,3));
            }
            protected override void OnResize(EventArgs e)
            {
                context.MaximumBuffer = new Size(this.Width +1,this.Height +1);
                if(grafx !=null)
                {
                    grafx.Dispose ();
                    grafx=null;
                }
                grafx = context.Allocate(this.CreateGraphics(), new Rectangle(0, 0, this.Width, this.Height));
                DrawToBuffer(grafx.Graphics);
                base.OnResize(e);
            }      
            protected override void OnPaint(PaintEventArgs e)
            {
                System.Diagnostics.Debug.WriteLine(string.Format ("MousePosition:{0}", MousePosition ));
                DrawToBuffer(grafx.Graphics);
                grafx.Render(e.Graphics );
            }
            protected override void OnMouseEnter(EventArgs e)
            {
               
                context.MaximumBuffer = new Size(this.Width + 1, this.Height + 1);
                if (grafx != null)
                {
                    grafx.Dispose();
                    grafx = null;
                }
                grafx = context.Allocate(this.CreateGraphics(), new Rectangle(0, 0, this.Width, this.Height));
                DrawToBuffer(grafx.Graphics);
                base.OnMouseEnter(e);
            }
            protected override void OnMouseLeave(EventArgs e)
            {
             
                context.MaximumBuffer = new Size(this.Width + 1, this.Height + 1);
                if (grafx != null)
                {
                    grafx.Dispose();
                    grafx = null;
                }
                grafx = context.Allocate(this.CreateGraphics(), new Rectangle(0, 0, this.Width, this.Height));
                DrawToBuffer(grafx.Graphics);
                base.OnMouseLeave(e);
            }

        }
    }

  • 相关阅读:
    SpringBoot进阶教程(六十七)RateLimiter限流
    Nginx限流配置
    ab test压力测试
    Nginx负载均衡配置
    arduino串口通信
    flask文件路径设置问题
    WIN10和ubunu共享文件夹相互访问
    树莓派录音和播放声音
    深度学习论文翻译解析(十六):Squeeze-and-Excitation Networks
    人工智能必备数学基础:高等数学基础(2)
  • 原文地址:https://www.cnblogs.com/teyond/p/OptimizedDoubleBuffer.html
Copyright © 2011-2022 走看看