您的位置:首页 > 其它

用双缓冲技术解决刷新屏幕时的闪屏问题

2015-03-12 15:13 344 查看
参考文档:http://www.2cto.com/kf/201404/295500.html

以下为完整的示例代码:

该示例是展示一个在界面上运动的圆形

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

namespace panelLib2Test

{

public partial class Form3 : Form

{

int val = 1;

Bitmap bmp = new Bitmap(600, 600);

Graphics g;

public Form3()

{

InitializeComponent();

this.SetStyle(ControlStyles.AllPaintingInWmPaint, true);

//开启双缓冲

SetStyle(ControlStyles.UserPaint, true);

SetStyle(ControlStyles.AllPaintingInWmPaint, true); // 禁止擦除背景.

SetStyle(ControlStyles.DoubleBuffer, true);

g = Graphics.FromImage(bmp);

}

private void Form3_Load(object sender, EventArgs e)

{

g.FillEllipse(Brushes.Green, val * 10, val * 10, 10, 10);

g.DrawEllipse(new Pen(System.Drawing.Color.Red), val, 10, 100, 100);

this.CreateGraphics().DrawImage(bmp, 0, 0);

}

private void Form3_Paint(object sender, PaintEventArgs e)

{

//g.FillEllipse(Brushes.Green, val * 10, val * 10, 10, 10);

//g.DrawEllipse(new Pen(System.Drawing.Color.Red), val, 10, 100, 100);

//this.CreateGraphics().DrawImage(bmp, 0, 0);

}

private void timer1_Tick(object sender, EventArgs e)

{

val++;

label1.Text = val.ToString();

g.Clear(Form3.DefaultBackColor);//这是清除画布中前一个图片

g.DrawEllipse(new Pen(System.Drawing.Color.Red), val, 10, 100, 100);

this.CreateGraphics().DrawImage(bmp, 0, 0);

}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: