您的位置:首页 > 其它

关于Graphics的一个应用实例

2009-02-22 12:30 429 查看
DrawRectangle.cs//画矩形的类
using System;
using System.Collections.Generic;
using System.Text;
using System.Drawing;
using System.Drawing.Drawing2D;
namespace wndApp.Code
{
class DrawRectangle
{
public Point location;//屏幕上点的坐标
public Size size;//有长和宽的矩形
public Color foreColor;//前景色,以上全部是一个结构体
public Color backColor;//背景色
/// <summary>
/// 画矩形的类的构造函数
/// </summary>
/// <param name="initSize">初始大小</param>
/// <param name="initForeColor">初始前景色</param>
/// <param name="initBackColor">初始背景色</param>
public DrawRectangle(Size initSize, Color initForeColor, Color initBackColor)
{
size = initSize;
foreColor = initForeColor;
backColor = initBackColor;
location = new Point(10, 10);//结构的new与类的new有区别,这里就是给结构内字段赋值了.
}
/// <summary>
/// 在指定窗体上画矩形
/// </summary>
/// <param name="winHandle">窗体句柄,是一个结构体</param>
public void Draw(System.IntPtr winHandle)
{
Graphics g = Graphics.FromHwnd(winHandle);//从窗口句柄载入
GraphicsPath gp = new GraphicsPath();//Drawing2D空间
Rectangle rec = new Rectangle(location, size);
gp.AddRectangle(rec);
Color[] surroundColor = new Color[] { backColor };
PathGradientBrush pb = new PathGradientBrush(gp);//渐变
pb.CenterColor = foreColor;
pb.SurroundColors = surroundColor;
g.FillPath(pb, gp);//参数,效果和路径
}
/// <summary>
/// 擦除指定窗体中的方块
/// </summary>
/// <param name="winHandle"></param>
public void Erase(System.IntPtr winHandle)
{
Graphics g = Graphics.FromHwnd(winHandle);
Rectangle rec = new Rectangle(location, size);
g.FillRectangle(new SolidBrush(Color.Red), rec);
}
}
}
调用的方法:
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;
using System.Media;
namespace wndApp
{
public partial class FrmDrawRectangle : Form
{
SoundPlayer sound = new SoundPlayer();//播放默认的声音,如果指定声音文件则播放指定声音
public FrmDrawRectangle()
{
InitializeComponent();
}
private void btnDraw_Click(object sender, EventArgs e)
{
sound.SoundLocation = "FinishOneLine.wav";
sound.Play();
}
//按钮的重绘事件
private void btnDraw_Paint(object sender, PaintEventArgs e)
{
Size size = new Size(50, 50);
Code.DrawRectangle rec = new Code.DrawRectangle(size,Color.Green,Color.Gold);
rec.Draw(this.pBoxMain.Handle);//PictureBox窗口句柄
}
private void btnKey_Click(object sender, EventArgs e)
{
FrmKeyDown key = new FrmKeyDown();
key.Show();
}
//Label的重绘事件,Text的改变不用刷新,图像的改变需要刷新
private void lblDraw_Paint(object sender, PaintEventArgs e)
{
Graphics gp = e.Graphics;
//gp.Clear(Color.Black);//不清除的话,则在原来图像上添加
Pen p = new Pen(Color.Red);
gp.DrawLine(p, 1, 30, 150, 30);
}
//调用Label的Paint事件
//引发Button的单击事件
private void btnReDraw_Click(object sender, EventArgs e)
{
Size size = new Size(50, 50);
Code.DrawRectangle rec = new Code.DrawRectangle(size, Color.Green, Color.Gold);
rec.Draw(this.lblDraw.Handle);
//lblDraw.Invalidate();//调用Paint重绘,一重绘就会清除原来的所有图像,更新画布.
btnKey.PerformClick();//引发Button的单击事件
}
}
}
end这里还有些知识点不清晰,先保存.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: