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

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 );         

}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值