日期:2014-05-17  浏览次数:20802 次

CGI中使用双缓冲遇到问题
关于Invalidate的使用 刚学C#
函数好像是指定某一区域无效,可我用下面代码 鼠标拖动会闪烁 这是为什么?
为什么我重绘改变的区域 会一直闪 而重绘非常小的一块 却看起来正常呢
MFC的Invalidate BOOL参数是指定是否先用背景填充区域 False直接覆盖 而C#没有?! 跟这有关吗?
项目里 我测出是对话框背景先重绘了次  这是为什么呢?
新手求解  OTL


Rectangle rc;
        public Form1()
        {
            InitializeComponent();
            rc = new Rectangle(5, 5, 0, 0);
        }

        private void Form1_Paint(object sender, PaintEventArgs e)
        {
            BufferedGraphicsContext current = BufferedGraphicsManager.Current;
            BufferedGraphics bg;

            bg = current.Allocate(this.CreateGraphics(), this.DisplayRectangle);
            Graphics g = bg.Graphics;

            g.Clear(Color.LightGray);

            Brush mybush = new SolidBrush(Color.Black);
            g.FillRectangle(mybush, new Rectangle(0, 0, 400, 400));

            Brush mybush2 = new SolidBrush(Color.Red);
            g.FillRectangle(mybush2, rc);  

            bg.Render();
            g.Dispose();
        }

        private void Form1_MouseMove(object sender, MouseEventArgs e)
        {
            rc.Width = e.X;
            rc.Height = e.Y;
            this.Invalidate(rc,true);
            //this.Invalidate(new Rectangle(0, 0, 5, 5), true);  //上面换成这行效果还好
        }

------最佳解决方案--------------------
你可以考虑用WPF做界面
------其他解决方案--------------------
设置 form 的doublebuffer = true;

------其他解决方案--------------------
啊咧咧 小顶下
------其他解决方案--------------------
没人么 = =
我试了下  图片画在picturebox上 用Invalidate就不会闪 
而在form下直接画 用invalidate就有事
这是为什么  有木有人解答下
------其他解决方案--------------------
引用:
设置 form 的doublebuffer = true;