C# VC窗体闪烁
这就是我要做的。我正在制作一个只使用S.W.F和S.D名称空间的游戏。当我使用1000/30间隔30帧的计时器时,在它的“滴答”事件中,我调用了InvokeGraphics。所有的渲染或多或少都很好,除了椭圆被画成红色。我尝试使用双缓冲,还有这个.SetStyle,但都失败了。下面是代码:C# VC窗体闪烁,c#,windows,winforms,windows-7,C#,Windows,Winforms,Windows 7,这就是我要做的。我正在制作一个只使用S.W.F和S.D名称空间的游戏。当我使用1000/30间隔30帧的计时器时,在它的“滴答”事件中,我调用了InvokeGraphics。所有的渲染或多或少都很好,除了椭圆被画成红色。我尝试使用双缓冲,还有这个.SetStyle,但都失败了。下面是代码: public partial class MainForm : Form { int x = 0; public MainForm() { InitializeCom
public partial class MainForm : Form
{
int x = 0;
public MainForm()
{
InitializeComponent();
var sz = SystemInformation.PrimaryMonitorSize;
this.FormBorderStyle = FormBorderStyle.None;
this.Size = sz;
this.SetStyle(ControlStyles.OptimizedDoubleBuffer,true);
Timer tmr = new Timer();
tmr.Enabled = true;
tmr.Interval = 1000/30;
tmr.Tick += delegate(object sender, EventArgs e)
{
x++;
this.InvokePaint(this,new PaintEventArgs(this.CreateGraphics(),this.Bounds));
};
}
protected override void OnKeyPress(KeyPressEventArgs e)
{
if((int)e.KeyChar == 27) Application.Exit();
base.OnKeyPress(e);
}
protected override void OnPaint(PaintEventArgs e)
{
var g = e.Graphics;
g.Clear(Color.Firebrick);
// this ellipse flickrs
g.FillEllipse(Brushes.Green,x,64,64,64);
base.OnPaint(e);
}
protected override void OnMouseClick(MouseEventArgs e)
{
base.OnMouseClick(e);
}
}
使用this.CreateGraphics不会创建双缓冲绘制上下文。将窗体的DoubleBuffered属性设置为true。并使用间隔为32毫秒的计时器强制刷新,仅在其Tick事件处理程序中调用Invalidate。使用此方法。CreateGraphics不会创建双缓冲绘制上下文。将窗体的DoubleBuffered属性设置为true。并使用间隔为32毫秒的计时器强制刷新,仅在其Tick事件处理程序中调用Invalidate。Note。这不是我的家庭作业。Note。这不是我的家庭作业。