《C#网络应用编程 第2版 习题答案作者 马骏 第12章 网络应用开发综合实例习题解答》由会员分享,可在线阅读,更多相关《C#网络应用编程 第2版 习题答案作者 马骏 第12章 网络应用开发综合实例习题解答(3页珍藏版)》请在金锄头文库上搜索。
1、第12章 网络应用开发综合实例习题12 参考解答1多机联合绘图系统中为何不使用Panel作为画板?【解答】 如果使用Panel作为画板,在绘制图形图像时会出现闪烁现象。因此单独设计一个用户控件用作画板,通过设置该用户控件的【DoubleBuffered】属性值为true来启用双缓冲,从而避免出现闪烁现象。2读懂多机联合绘图系统的源程序,在此基础上进行功能扩展。1)实现任意大小三角形和六边形的绘制。2)实现任意形状的带箭头曲线、封闭曲线的绘制。【解答】1)在项目中添加一个新类DrawPloygon使其从TrackRectangle继承,重写TrackRectangle类中Draw方法实现椭圆的绘
2、制。class DrawPloygon: TrackRectangle public Rectangle objRectangle;/绘制的多边形外接矩形 public DrawPloygon () public DrawPloygon (int x, int y, int width, int height, Color penColor,int id) this.objRectangle = new Rectangle(x, y, width, height); this.penColor = penColor; this.ID = id; public override void Dra
3、w(Graphics g) /重写基类的方法 using (Pen pen = new Pen(this.penColor) int x = this.objRectangle.X; int y = this.objRectangle.Y; /三角形的三个顶点 Point points = new Point3; points0 = new Point(2 * x + this.objRectangle.Width) / 2, y); points1 = new Point(x, y+this.objRectangle.Height); points2 = new Point(x+this.o
4、bjRectangle.Width, y+this.objRectangle.Height); g.DrawPolygon(pen,points); 若要实现六边形的绘制,只需要修改Draw方法即可。具体代码如下:public override void Draw(Graphics g) using (Pen pen = new Pen(this.penColor) int x = this.objRectangle.X; int y = this.objRectangle.Y; /其余六个顶点 Point points = new Point6; points0 = new Point(2
5、* x + this.objRectangle.Width) / 4, y); points1 = new Point(x, (2*y + this.objRectangle.Height)/2); points2 = new Point(2 * x + this.objRectangle.Width) / 4,y+this.objRectangle.Height); points3 = new Point(2 * x + this.objRectangle.Width) *3/ 4, y + this.objRectangle.Height); points4 = new Point(x+t
6、his.objRectangle.Width, (2*y+this.objRectangle.Height)/2); points5 = new Point(2 * x + this.objRectangle.Width) * 3 / 4, y); g.DrawPolygon(pen, points); 2)实现任意形状的带箭头的曲线、封闭曲线的绘制。从TrackCurve类派生子类DrawArrowCurve、DrawClosedCurve类,分别重写Draw方法。对于带箭头的曲线DrawArrowCurve类的Draw方法的定义如下:public override void Draw(Gr
7、aphics g) Point pts = new PointpointList.Count; pointList.CopyTo(pts); Pen pen = new Pen(penColor, penWidth); g.SmoothingMode = SmoothingMode.AntiAlias; AdjustableArrowCap myArrow = new AdjustableArrowCap(4, 4, true); pen.CustomEndCap = myArrow; if (pts.Length 1) g.DrawLine(pen, pts0, pts1); else g.
8、DrawCurve(pen, pts); pen.Dispose(); 对于绘制封闭的曲线来说,设计类DrawClosedCurve其中Draw方法定义如下:public override void Draw(Graphics g) Point pts = new PointpointList.Count; pointList.CopyTo(pts); Pen pen = new Pen(penColor, penWidth); g.SmoothingMode = SmoothingMode.AntiAlias; AdjustableArrowCap myArrow = new AdjustableArrowCap(4, 4, true); pen.CustomEndCap = myArrow; if (pts.Length 1) g.DrawLine(pen, pts0, pts1); else g.DrawClosedCurve(pen, pts); pen.Dispose(); 3