public partial class Form1 : Form
{ public Form1()
{
InitializeComponent();
}
int x = 50, y = 50;
private void Form1_Paint(object sender, PaintEventArgs e)
{
SolidBrush sb = new SolidBrush(Color.White);
Graphics g = this.CreateGraphics();
g.FillEllipse(sb, new Rectangle(x, y, 20, 20)); sb.Dispose();
g.Dispose();
}
}
private void Form1_KeyPress(object sender, KeyPressEventArgs e)
{ if (e.KeyChar == '6')
{
x += 3;
SolidBrush sb = new SolidBrush(Color.Blue);
Graphics g = this.CreateGraphics();
g.FillEllipse(sb, new Rectangle(x,y, 20, 20));
}
}
}我通过以上代码在windows窗口里画了一个圆球,按"6"小球向右移动画出一条线
我发现每当我将窗口最小化后再打开这条线就没了
想问有什么方法能使最小化后线条仍然存在?
然后重写重绘函数!
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
SolidBrush sb = new SolidBrush(Color.White);
Graphics g = e.graphics;
g.FillEllipse(sb, new Rectangle(x, y, 20, 20)); }private void Form1_KeyPress(object sender, KeyPressEventArgs e)
{ if (e.KeyChar == '6')
{
x += 3;
this.refresh(); }
}
{ public Form1()
{
InitializeComponent();SetStyle(ControlStyles.UserPaint, true);
}
int x = 50, y = 50;
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
SolidBrush sb = new SolidBrush(Color.White);
Graphics g = e.graphics;
g.FillEllipse(sb, new Rectangle(x, y, 20, 20)); } private void Form1_KeyPress(object sender, KeyPressEventArgs e)
{ if (e.KeyChar == '6')
{
x += 3;
this.refresh(); }
} }
当因为某些原因这些内容消失时,比如:最小化,被其它窗口覆盖等,那么就会发生Validate这样的事件。
上面的兄弟提到的OnPaint就是当窗口需要被重绘时所产生的事件,由于Windows没有记录任何图片的内容,那么在你的程序中就必须记录这些信息,它可以是位图形式的,也可以是矢量形式的。对于你的程序而言,就可以是矢量形式的,你只需要记录这条线的:起点,终点,颜色等。//这样记录:
public Point startPoint;
public Point endPoint;
public Pen drawPen;//这样重绘
public onPaint()
{
DrawLine(startPoint,endPoint,drawPen);
}
这些都只是伪代码。