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

}

相关文章推荐

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

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

使用GDI+进行图片处理时要注意的问题

与GDI相比,GDI+要强大很多。对于Windows应用程序来说,用GDI是比较多的,也是比较熟练的,GDI+相对用的较少一点,但是现在GDI+的使用已经很普遍了。GDI+支持各种类型图片的处理,比如...

使用GDI+进行图片处理时要注意的问题

使用GDI+进行图片处理时要注意的问题

上传图片时,使用GDI+中重绘方式将CMYK图片转为RGB图片

我们知道,如果网站上传图片时,如果用户上传的是CMYK图片,那么在网站上将是无法显示的(IE8浏览器或以下,火狐、谷歌浏览器可以),通常的现象是出现一个红叉。 下面使用将Image重新绘制为Form...

GDI+ 绘图时,相同分辨率, DPI不同时图片显示的问题.

最后在VC中使用GDI+作图片处理时, 突然发现有几张图片显示不正常,未按实际像素大小显示. 代码很简单: void CTransBmpDlg::OnBnClickedImgTest() { ...

使用 GDI+ 双缓冲 解决绘图闪烁问题

现在的问题是很多人不知道怎么怎么使用GDI+ 双缓冲 public partial class Form1 : Form     {   //记录矩形位置的变量         Point...

在SDK中使用GDI+出现的编译问题解决方法

转自VC错误:http://www.vcerror.com/?p=2008 问题描述: 在MFC中使用GDI+,编译时不会出现什么大的问题,但是SDK中却会报告很多未定义的类型,其中主要是和C...

GDI+ DrawImage函数拉伸图片时自动渐变问题

DrawImage函数在绘制图片时,如果有拉伸会导致自动渐变的问题。具体描述如下。 假设我们要做一个进度条,用自己的png格式图片作为背景和前景进行绘制,此时必然要拉伸图片,一是我们在横...

VC++中使用gdi+的编绎问题

GDI+是COM对象,所以在程序中分使用comdef.h定义文件 #include #include #include using>Visual C++ 6.0 编绎真的很快!省心省力省时间...
  • aasmfox
  • aasmfox
  • 2013年12月25日 20:42
  • 1386

GDI+ 为了阴影和透明,使用双层窗口遇到的一些问题

在wnidows C++ 客户端开发中,使用GDI+和png透明或者异形图片,结合UpdateLayeredWindow 双层窗口,可以实现透明,阴影,异形的效果。 其原理便是背景窗口使用Update...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:使用GDI+时关于窗体重绘的问题
举报原因:
原因补充:

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