使用GDI+时关于窗体重绘的问题

原创 2006年06月19日 11:16:00

GDI+对窗体(Form)进行绘图(就是画圆等操作,用Graphics来做的),代码如下:

private void button1_Click(object sender, System.EventArgs e)

{

    System.Drawing.Graphics g = this.CreateGraphics();

    g.FillEllipse( Brushes.Red , 100 , 100 , 50 , 50 );

}

 

当窗体刷新时,上面的圆就不见了,就是说,最小化以后,再还原圆就没有了,因为用Graphics 画的东西只是暂时的,所以不可能一直在窗体上,那怎么解决这个问题呢?

下面给出三个方法来解决:

第一个:用thread,定时执行画图程序。

第二个:用窗体的Paint事件,在Paint里写上述画图程序,就会发现图像不会因刷新而不见了,但是还有一个问题,就是这个事件是要驱动的,也就是说,当你改变图像的位置时,图像不会变的,只有刷新后才会看到变化,刷新也很简单,用Refresh()就行了,下面就是完整的代码,其中x,y是全局变量,初始值都是0;

int x = 0 ,y = 0 ;

private void button1_Click(object sender, System.EventArgs e)

{      

    x += 10;

    y += 10;

    this.Refresh();

}

 

private void Form1_Paint(object sender, System.Windows.Forms.PaintEventArgs e)

{

    System.Drawing.Graphics g = this.CreateGraphics();

    g.FillEllipse( Brushes.Red , x , y , 50 , 50 );

}

 

第三个方法就是重写(override)OnPaint方法,原理和窗体的Paint事件一样,如果大家把this.Refresh() 放到Form1_Paint中,就会看到,窗体在不停的进行刷新,和第一个用thread的原理是一样的,万变不离其中,道理都是一样的。下面给出override的代码:

private void button1_Click(object sender, System.EventArgs e)

{

    x += 10;

    y += 10;

    this.Refresh();

}

protected override void OnPaint(PaintEventArgs e)

{

    System.Drawing.Graphics g = this.CreateGraphics();

    g.FillEllipse( Brushes.Red , x , y , 50 , 50 );         

}

MFC控件重绘

MFC的一系列重绘控件: 如图所示: 示例下载地址:http://download.csdn.net/detail/qq_23992597/9510696...
  • qq_23992597
  • qq_23992597
  • 2016年05月09日 11:47
  • 2578

谈WinForm窗体重绘

谈WinForm窗体重绘        在工作之余花了较长的时间终于将LiuZhenHong.Controls 1.x升级到2.0。在这一过程中拜读了许多大师的博文,从中也学到了很多的知识。在此...
  • ll_zz_hh_
  • ll_zz_hh_
  • 2013年04月10日 09:11
  • 2505

WIN32界面开发之二:GDI+中的局部刷新技术

前言:GDI+很好用,但要将所有图像混合,必须要用到UpdateLayeredWindow,但UpdateLayeredWindow注定每次刷新都要刷新整个窗体,也就是说,哪怕我们只是改变的只是一个像...
  • harvic880925
  • harvic880925
  • 2013年07月17日 15:13
  • 10036

C# GDI+ 窗体绘图刷新重绘问题 GDI+绘图问题

最近用GDI+绘制曲线,出现下面的问题,见图。请高手指点。曲线是直接绘制到窗体上的,只绘制失效区中的内容,当其它窗体在上面拖动的时候会留下很长的拖影,下面这张图片是上面的部分进行曲线重绘,下面的部分不...
  • zhangjinxin_2001
  • zhangjinxin_2001
  • 2011年04月30日 22:22
  • 1865

对GDI+绘制圆弧接口的理解

对GDI+绘制圆弧接口的理解。
  • clever101
  • clever101
  • 2011年02月19日 14:51
  • 8343

C#中使用GDI画图工具动态显示

1、在C#中使用画图工具,可以动态显示系统监控数据的变化,比如自动化生产过程中,总生产数,良品数,以及良品 率等等,这些数据都需要直观的体现出来。比较常用的是用饼状图显示实时数据。 2、使用C#画...
  • wuguanghao
  • wuguanghao
  • 2017年03月14日 22:01
  • 1115

窗口刷新问题(WMPAINT、BeginPaint、EndPaint的说明)

在某些情况下,显示区域的一部分被临时覆盖,Windows试图保存一个显示区域,并在以后恢复它,但这不一定能成功。在以下情况下,Windows可能发送WM_PAINT消息:   Windows擦除覆盖...
  • chenlycly
  • chenlycly
  • 2015年12月22日 22:49
  • 4666

【转】VB6 GDI+ 入门教程(2)—— GDI+初始化

版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明 http://vistaswx.blogbus.com/logs/37196805.html 现在先让我们了解下GDI+的...
  • JiLuoXingRen
  • JiLuoXingRen
  • 2012年11月24日 00:11
  • 5237

C#重绘windows窗体标题栏和边框

摘要 windows桌面应用程序都有标准的标题栏和边框,大部分程序也默认使用这些样式,一些对视觉效果要求较高的程序,如QQ, MSN,迅雷等聊天工具的样式则与传统的windows程序大不相同,其中迅...
  • guangboo
  • guangboo
  • 2012年12月06日 12:02
  • 7247

深入Windows窗体原理及控件重绘技巧

之前有学MFC的同学告诉我觉得Windows的控件重绘难以理解,就算重绘成功了还是有些地方不明白,我觉得可能很多人都有这样的问题,在这里我从Windows窗体的最基本原理来讲解控件的WM_DRAWIT...
  • wenzhou1219
  • wenzhou1219
  • 2013年12月29日 13:46
  • 20512
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:使用GDI+时关于窗体重绘的问题
举报原因:
原因补充:

(最多只允许输入30个字)