关于窗体重画问题

玄魂 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)窗体部分覆盖后,只部分重画。
现在的疑问是,窗体重绘机制到底是什么?有什么样的类什么样的方法与此有关?窗体的局部重绘是怎么实现的?
...全文
152 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
玄魂 2008-07-02
  • 打赏
  • 举报
回复
就没其它的回答了吗?
sjm2003 2008-06-30
  • 打赏
  • 举报
回复
1、这属于两个动作,第一行字符即M、N未改变时画上的一行字符,第二行是M、N改变后画上的,且GDI+画图不会因为画其它的字符串而把前一字符串檫掉,除非调用clear(color.?),以某种颜色去覆盖。
2、之所以用重绘,就是为了避免窗体被遮挡后,所有的控件、背景等被抹掉。你用的windows系统本身就有这方面的运用。
3、节约资源,以及提高效率。

现在的疑问是,窗体重绘机制到底是什么?有什么样的类什么样的方法与此有关?窗体的局部重绘是怎么实现的?
----
什么类与此有关---GDI 类

局部重绘---就当他有个数组,自动帮你记录所有的坐标点,具体怎么操作的,比尔盖次知道。
玄魂 2008-06-30
  • 打赏
  • 举报
回复
能说得清楚些吗?谢谢
fffvvvzz 2008-06-30
  • 打赏
  • 举报
回复
裁剪

110,572

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧