加个 panel 宽度 或 高度 设置 成 1
解决方案 »
- C#程序做一个图像采集系统,调用本地的扫描仪设备,了解一下Twain与Wia两个驱动区别,那个更合适实现功能
- RichTextBox选中项居中
- JavaScrpt调用带参数的C#后台函数,传参问题
- Microsoft.Office.Interop.Excel实例化时在2000和xp没有报错,到2003系统中时提示找不到路径和excel模板文档,请问这个是怎么回事
- 如何将xml文件中的记录更新到sqlserver中
- 关于用户名textbox的验证
- 绘制菜单边框的问题,高手接分。
- 怎么让C#子窗口的右上角关闭按钮可以关闭整个程序,但是子窗体的close()只关闭子窗口自身
- 无法绑定由多个部分组成的标识符---这是什么错误
- C#中的换行符是什么?
- C#编程的三个问题
- 写过DLL的进来看看
this.Paint += new PaintEventHandler(form1_Paint);
……public void form1_Paint(Object sender,PaintEventArgs e)
{
Pen blackPen = new Pen(Color.Black, 3);
Point point1 = new Point(100, 100);
Point point2 = new Point(500, 100);
e.Graphics.DrawLine(blackPen, point1, point2);
}
>>c#中没有shape控件吗?
没有,用GDI+画并不麻烦.你可以参考System.Drawing 命名空间的资料
ms-help://MS.VSCC/MS.MSDNVS.2052/cpref/html/frlrfSystemDrawing.htm
相关的东东,参看一下MSDN,并注意一下,VS.net中提供的属性,稍稍看一下了之后就出来了。对了,你可以自己封装一个用户控件来实现,在你理解了GDI+之后是很容易的。
如下是摘抄:
GDI+是从GDI演化而来的,但是在Visual Studio的以前版本中使用GDI是相当复杂的,而且工作量巨大。现在在GDI+中,微软已经帮我们解决了许多问题,因而使用GDI+编程将变得非常容易。 GDI+包含在System.Drawing.Dll集合中,所有的GDI+类包含在System.Drawing,System.Text,System.Printing,System.Internal,System.Imaging,System.Drawing2D以及System.Design等命名空间中。 本文先向大家介绍一下图形类(Graphics Class)。然后,会向大家介绍一些最常用的类和结构,包括画笔(Pen)、画刷(Brush)、字体(Font)、颜色(Color)等类或结构。文章的最后还给出了一些很有用的用.Net框架的原生语言C#实现的例子。 图形类(Graphics Class)
我们用图形类的对象来表示GDI+的图形表面。为了使用GDI+,我们必须先建立一个图形类对象。通常,我们可以从Paint这个事件获得图形类对象的一个引用或是通过重载方法OnPaint来取得该对象。具体方法如下:
private void form1_Paint(object sender, PaintEventArgs pe){Graphics g = pe.Graphics;}
或是:
protected override void OnPaint(PaintEventArgs pe){Graphics g = pe.Graphics;}
建立好图形类对象后,我们就可以调用以下一些方法来完成基本的画图功能了。
DrawArc (已重载的)画一段弧线
DrawClosedCurve (已重载的)画一段由一些点确定的闭合折线
DrawCurve (已重载的)画一段由一些点确定的折线
DrawEllipse (已重载的)画一个椭圆
DrawImage (已重载的)画一副图象
DrawLine (已重载的)画一条直线
DrawPath 画一段路径(包括直线和曲线)
DrawPie (已重载的)画一个馅饼区的轮廓
DrawPolygon (已重载的)画一个多边形的轮廓
DrawRectangle (已重载的)画一个矩形的轮廓
DrawString (已重载的)画一串字符串
FillEllipse (已重载的)填充一个椭圆形区域
FillPath 填充一个路径
FillPie (已重载的)填充一个馅饼区域
FillPolygon (已重载的)填充一个多边形
FillRectangle 用画刷填充一个矩形
FillRectangles 用画刷填充一系列矩形
FillRegion 填充一个区域 图形对象
建立图形对象后,我们就可以用它来画线、填充图形以及画文本等等。以下是一些主要的图形对象:
Brush
用来填充特定的表面
Pen
用来画直线、多边形、矩形、弧线以及馅饼区等
Font
用来设置文本的字体
Color
用来设置特定对象的颜色(在GDI+中,颜色可以是Alpha混合的) 画刷类(Brush Class)
画刷类是一个抽象基类,我们不能直接将它实例化。我们必须实例化它的子类对象,它的子类包括:SolidBrush,TextureBrush,RectangleGradientBrush以及LinearGradientBrush。 举例如下:
LinearGradientBrush lBrush = new LinearGradientBrush(rect, Color.Red, Color.Yellow,LinearGradientMode.BackwardDiagonal);
Brush brsh = new SolidBrush(Color.Red), 40, 40, 140, 140);
SolidBrush类定义一把由单色构成的画刷。这个画刷可以用来填充像矩形、椭圆形、馅饼形、多边形以及路径这样的图形区域。 TextureBrush类定义一把可以将一定区域用图象来填充的画刷。 LinearGradiantBrush类可以定义一把两种颜色间变化的画刷,也可以定义一把多种颜色间变化的画刷。 画笔类(Pen Class)
画笔类用来画具有特定宽度和风格的直线和曲线。我们必须先用画笔类的构造函数初始化一个画笔对象,在实例化的时候还可以用到颜色和画刷。 用特定的颜色初始化新的画笔对象: public Pen(Color); 用特定的画刷初始化新的画笔对象: public Pen(Brush); 用特定的画刷以及宽度初始化新的画笔对象: public Pen(Brush, float); 用特定的颜色以及宽度初始化新的画笔对象: public Pen(Color, float); 举例如下:
Pen pn = new Pen( Color.Blue );
或是:
Pen pn = new Pen( Color.Blue, 100 );
以下是画笔类的一些最常用的属性:
Alignment
获得或设置用画笔画的对象的边界
Brush
获得或设置决定画笔特性的画刷
Color
获得或设置画笔的颜色
Width
获得或设置画笔的宽度
字体类(Font Class)
字体类决定了特定文本的字体格式,比如:字体类型、大小以及风格。我们用字体类的构造函数建立一种字体。 用特定的属性初始化新的字体对象:
public Font(string, float);
用特定的已存在的字体和字体风格初始化新的字体对象:
public Font(Font, FontStyle);
以下是一些字体风格:
Bold
粗体
Italic
斜体
Regular
正常字体
Strikeout
有删除线
Underline
有下划线 举例如下:
Graphics g ;Font font = new Font("Times New Roman", 26);
颜色结构(Color Structure)
一个颜色结构代表一种ARGB格式的颜色。以下是它的ARGB属性: A:获得颜色的Alpha成分值 B:获得颜色的蓝色成分值 G:获得颜色的绿色成分值 R:获得颜色的红色成分值 下面是如何使用颜色结构的例子:
Pen pn = new Pen( Color.Blue );
到现在,我相信大家已经对.Net框架下的GDI+有了大致的了解。为了让大家更直观的理解有关GDI+的编程知识,我特意为大家准备了以下一些基本但又很有用例子。通过对这些例子的学习,我相信大家对.Net框架下的GDI+编程会有更深刻的理解。同时要说明的是,下面的例子是用C#语言实现的,如果你是一位VB.net的爱好者,不妨通过适当修改代码来实现同样的功能。 画一个矩形:
protected override void OnPaint(PaintEventArgs pe)
{Graphics g = pe.Graphics ;//设置矩形区域的位置和大小
Rectangle rect = new Rectangle(0, 0, 200, 200);//使填充矩形的颜色从红色到黄色渐变
LinearGradientBrush lBrush = new LinearGradientBrush(rect, Color.Red, Color.Yellow,LinearGradientMode.BackwardDiagonal);
g.FillRectangle(lBrush, rect);}
画一个椭圆: protected override void OnPaint(PaintEventArgs pe)
{Graphics g = pe.Graphics ;//建立一只100象素宽、呈蓝色的画笔
Pen pn = new Pen( Color. ForestGreen, 100 );
Rectangle rect = new Rectangle(50, 50, 180, 100);
g.DrawEllipse( pn, rect );}
画一段文本: protected override void OnPaint(PaintEventArgs pe)
{Graphics g = pe.Graphics;//文本内容为"Welcome to the Graphics World!"
g.DrawString("Welcome to the Graphics World!", this.Font, new SolidBrush(Color.Red), 10,10);}
画一条直线: protected override void OnPaint(PaintEventArgs pe)
{Graphics g = pe.Graphics ;
Pen pn = new Pen( Color.Blue, 10 );
//预先设定好两个点
Point pt1 = new Point( 30, 30);
Point pt2 = new Point( 110, 100);
g.DrawLine( pn, pt1, pt2 );}
画一段折线: protected override void OnPaint(PaintEventArgs pe)
{Graphics g = pe.Graphics;//建立一只20象素宽、呈粉红色且半透明的画笔Pen penExample = new Pen(Color.FromArgb(150, Color.Purple), 20);
//使画笔画出虚线
penExample.DashStyle = DashStyle.Dash;
//将画笔开始和结束处都设置为圆形
penExample.StartCap = LineCap.Round;
penExample.EndCap = LineCap.Round;
//现在用画笔画曲线
g.DrawCurve(penExample, new Point[] {new Point(100, 70),new Point(350, 120),new Point(250, 170),new Point(70, 70),new Point(20, 170),});}
画一个填充颜色逐渐变化的多边形图形:
protected override void OnPaint(PaintEventArgs e)//这里是重载OnPaint函数
{e.Graphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;
e.Graphics.FillRectangle(new SolidBrush(Color.FromArgb(180,Color.White)),ClientRectangle);
//建立图形路径
GraphicsPath path = new GraphicsPath(new Point[] {new Point(40, 40),new Point(275, 100),new Point(105, 125),new Point(190, 200),new Point(50, 250),new Point(20, 80),}, new byte[] {(byte)PathPointType.Start,(byte)PathPointType.Bezier,(byte)PathPointType.Bezier,(byte)PathPointType.Bezier,(byte)PathPointType.Line,(byte)PathPointType.Line,});
//建立一个PathGradientBrush对象PathGradientBrush pgb = new PathGradientBrush(path);
pgb.SurroundColors = new Color[] {Color.Green,Color.Yellow,Color.Red,Color.Blue,Color.Orange,Color.White,};
//最后进行填充
e.Graphics.FillPath(pgb, path);}
(注:以上例子均需在Windows2000 Server版或Windows XP Professional版以及Vs.net环境下才能实现)