在线用户    站点地图 技术论坛 文档中心 站点导航 资源下载 语言参考 教程专题 站点统计 业务项目 使用帮助
您的位置
MSDN参考新加了CSS2参考,全中文,制作精良。245k下载。           新加了sxf_sxf推荐的"动态网页专家指导" 下载!          新加了lsg2002lsg推荐的"ASP.NET高级编程(PDF)" 下载!          新加了DHTML代码预览!!,功能强大哦!欢迎试用          新加了网友lincong为大家提供的SQL Server 2000 程序员指南,有点大,但同时也就说明内容全咯!           新加了网友ibra为大家提供的北大的JAVA课件,很适合初学者入门           新加了一个java的连接缓冲池代码示例           新加了人月神话电子版下载!软件工程巨著哦~~           更新了评分标准,引入了“专家分”概念,相信可以更好的激励大家的学习!详情请看“使用帮助”           新加了由网友GGG提供的“IIS超级管理手册”,值得一看哦!(虽然我没看过 :P )           新加了“英雄榜”,欢迎测试!           “无组件上传·从原理剖析到实践”已经全部完成,源码全部开放,有兴趣的朋友请到文档中心一探究竟。  您的位置  首页>技术论坛>C#>F0117253 在同一窗口中打开页面中的链接 在新窗口中打开页面中的链接 将ASPCHINA设为首页 将ASPCHINA加入书签    
 LOGIN HERE
用户:
密码: 忘记密码
记住密码 用户注册 游客进入

论坛首页
|--web开发
   |--ASP
   |--JSP
   |--ASP.net
   |--DHTML
   |--RUBY
|--软件开发
   |--C++
      |--Code here
   |--JAVA
   |--VB
   |--Delphi
   |--XML
|--.net技术
   |--C#
   |--VB.net
|--Yup开发组
|--站务&投诉
   |--站长专区
|--硬件&网络
|--休息室
|--数据库技术
 进入精华区 我要发言



 应该怎么改才能避免画面闪烁back to C# forum  
作者:gyzhen,4级分数:5
日期:2004/5/16 12:46:00类别:C#, 技术问题
回复:10次浏览:1399次
状态:已结贴 [miles(5)]

初学c#绘图,想做个简单的动画,就用了重绘背景再画图的方法,但动画看起来很闪烁,晃眼。请问应该怎么改才能避免画面闪烁呢?
我的代码如下,请高手指点,谢谢!
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using System.Drawing.Drawing2D;
namespace WindowsApplication7
{
  /// <summary>
  /// Form1 的摘要说明。
  /// </summary>
  public class Form1 : System.Windows.Forms.Form
  {
    private System.Windows.Forms.Timer timer1;
    private System.ComponentModel.IContainer components;
    Pen pen=new Pen(Color.Red,5);
    int i=0;
    public Form1()
    {
      //
      // Windows 窗体设计器支持所必需的
      //
      InitializeComponent();

      //
      // TODO: 在 InitializeComponent 调用后添加任何构造函数代码
      //
    }

    protected override void OnPaint(PaintEventArgs e1)
    {
   
      Graphics g=e1.Graphics;
      e1.Graphics.SmoothingMode=SmoothingMode.AntiAlias;
      Brush bgBrush=new SolidBrush(Color.Green);
      g.FillRectangle(bgBrush,ClientRectangle);
      //Pen pen=new Pen(Color.Red,5);
      g.DrawEllipse(pen,100,150,50,50);
    }

    /// <summary>
    /// 清理所有正在使用的资源。
    /// </summary>
    protected override void Dispose( bool disposing )
    {
      if( disposing )
      {
        if (components != null)
        {
          components.Dispose();
        }
      }
      base.Dispose( disposing );
    }

    #region Windows 窗体设计器生成的代码
    /// <summary>
    /// 设计器支持所需的方法 - 不要使用代码编辑器修改
    /// 此方法的内容。
    /// </summary>
    private void InitializeComponent()
    {
      this.components = new System.ComponentModel.Container();
      this.timer1 = new System.Windows.Forms.Timer(this.components);
      //
      // timer1
      //
      this.timer1.Enabled = true;
      this.timer1.Interval = 10;
      this.timer1.Tick += new System.EventHandler(this.timer1_Tick);
      //
      // Form1
      //
      this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
      this.ClientSize = new System.Drawing.Size(624, 341);
      this.Name = "Form1";
      this.Text = "Form1";

    }
    #endregion

    /// <summary>
    /// 应用程序的主入口点。
    /// </summary>
    [STAThread]
    static void Main()
    {
      Application.Run(new Form1());
    }

    private void timer1_Tick(object sender, System.EventArgs e)
    {
    //MessageBox.Show("SDF");
      Graphics g=this.CreateGraphics();
      Brush bgBrush=new SolidBrush(Color.Green);
      g.FillRectangle(bgBrush,ClientRectangle);
     
      g.DrawEllipse(pen,i+=5,150,50,50);
      String drawString = "Sample Text";
      // Create font and brush.
      Font drawFont = new Font("Arial", 16);
      SolidBrush drawBrush = new SolidBrush(Color.Black);
      // Create point for upper-left corner of drawing.
      float x = 150.0F;
      float y =  50.0F;
      // Set format of string.
      StringFormat drawFormat = new StringFormat();
      drawFormat.FormatFlags = StringFormatFlags.DirectionVertical;
      // Draw string to screen.
      g.DrawString(drawString, drawFont, drawBrush, x, y, drawFormat);

      if(i>this.Width)i=0;
    }
  }
}


reply[F0117253]
 



 
 re [1] 应该怎么改才能避免画面闪烁C# forum  
- miles04-05-17 01:10  

无论是java还是.net,一般的做法都是用双缓冲解决闪烁。你可以在MSDN搜索一下双缓冲(double buffer),应该有例子的。

reply[F0117285]
 



 
 re [2] 应该怎么改才能避免画面闪烁C# forum  
- gyzhen04-05-17 13:00  

在csdn中搜索双缓冲,居然找不到

reply[F0117350]
 



 
 re [3] 应该怎么改才能避免画面闪烁C# forum  
- gyzhen04-05-17 13:00  

哪个老大有例子的给个看看啊,谢谢

reply[F0117351]
 



 
 re [4] 应该怎么改才能避免画面闪烁C# forum  
- miles04-05-18 08:39  

double buffering:



看看,完整例子。

reply[F0117421]
 



 
 re [4] 应该怎么改才能避免画面闪烁C# forum  
- miles04-05-18 08:44  

晕。。忘了看是c++的了。

http://www.c-sharpcorner.com/graphics/AnimationControl.asp

http://dotnetjunkies.com/Newsgroups/microsoft.public.dotnet.framework.windowsforms/2004/4/16/138670.aspx

这两个。

reply[F0117422]
 



 
 re [5] 应该怎么改才能避免画面闪烁C# forum  
- gyzhen04-05-18 12:38  

谢了,看看能否搞定

reply[F0117487]
 



 
 re [6] 应该怎么改才能避免画面闪烁C# forum  
- miles04-05-19 09:32  

good luck!

reply[F0117579]
 



 
 re [6] 应该怎么改才能避免画面闪烁C# forum  
- miles04-05-29 17:47  

如何了?

reply[F0119293]
 



 
 re [7] 应该怎么改才能避免画面闪烁C# forum  
- gyzhen04-05-30 01:41  

差不多啦!谢谢!

reply[F0119325]
 



 
 re [8] 应该怎么改才能避免画面闪烁C# forum  
- miles04-06-01 08:28  

别忘记结贴哦~~

reply[F0119494]
 



您的位置
  (c)2000-2019 Yup Studio, all rights reserved.  
171.875