关于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这里还有些知识点不清晰,先保存.
相关文章推荐
- 关于支持向量机(SVM)的一个简单应用实例及matlab代码
- 关于Go的一个文件目录共享应用实例
- 关于GUI的一个应用实例,学得越多,越感觉有意思
- 关于Button控件的CommandName属性用法的一个实例
- 无缝滚动实例--dedecms的一个应用
- 一个awk应用实例
- 区块链技术公司应用实例 一个技术行业的发展史
- PHP数据流应用的一个简单实例
- 如何确保应用只有一个实例运行
- 关于JNDI,tomcat,jsp的一个小实例
- [置顶] 关于 傲游应用(APP) 的一个记叙
- 关于“vc 运行一个进程实例”文章是愚蠢的
- java高级进阶关于java多线程的应用 ThreadLocal多线程实例详解
- Andrew机器学习课程笔记(6)[End]—— 机器学习的一个应用实例
- [转]一个贝叶斯(动态线性)模型的应用实例?
- Nginx关于日志记录实例应用
- 贴一个定义android animation的应用实例
- 一个小小的简单计算器问题,有关于栈的应用
- Ajax在MVC中的应用——一个简单的.NET MVC 实例(续)
- 创建node.js一个简单的应用实例