关于窗体重画问题
玄魂 2008-06-30 01:22:41 做了个测试程序:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Drawing.Drawing2D;
namespace 画图1
{
public partial class Form1 : Form
{
private static int m = 0;
private static int n = 0;
Graphics g;
public Form1()
{
InitializeComponent();
g = this.CreateGraphics();
}
private void button1_Click(object sender, EventArgs e)
{
SolidBrush solid = new SolidBrush(Color.Red);
Font f = new Font("Arial", 10);
g.DrawString("nihao", f, solid, 10, 15);
m = m + 10;
n = n + 10;
}
private void Form1_Paint(object sender, PaintEventArgs e)
{
Pen p = new Pen(Color.Red);
e.Graphics.DrawLine(p, 30, 50, 40, 60);
drawstring(m,n);
}
private void drawstring(int m,int n)
{
SolidBrush solid = new SolidBrush(Color.Red);
Font f = new Font("Arial", 10);
g.DrawString("nihao", f, solid,m,n);
}
}
}
现在通过这个程序可以看到,初始化,调整窗体大小,引发button事件,窗体被覆盖时,都会引发重绘事件。但是有几个问题不时很理解:
(1)button1_Click()时,Form1_Paint画字符串到窗体上,再单击button1还会再画一个字符串到窗体上,但前一次画上的字符串和button1_Click()画上的字符串没有消失。
(2)最小化后,窗体只剩下Form1_Paint画上的字符串。
(3)窗体部分覆盖后,只部分重画。
现在的疑问是,窗体重绘机制到底是什么?有什么样的类什么样的方法与此有关?窗体的局部重绘是怎么实现的?