你的位置:首页 > 软件开发 > ASP.net > 【C#】第3章补充(二)如何将图形作为对象

【C#】第3章补充(二)如何将图形作为对象

发布时间:2016-06-23 07:00:05
分类:C#、VS2015 创建日期:2016-06-23 使用教材:(十二五国家级规划教材)《C#程序设计及应用教程》(第3版) 一、要点 该例子属于高级技术中的基本用法。对于初学者来说这是难点(难在还没有学习第13章WPF相关的绘图技术),因此,这里的关键是理解设计思路,而不是 ...

分类:C#、VS2015

创建日期:2016-06-23

使用教材:(十二五国家级规划教材)《C#程序设计及应用教程》(第3版)

一、要点

该例子属于高级技术中的基本用法。对于初学者来说这是难点(难在还没有学习第13章WPF相关的绘图技术),因此,这里的关键是理解设计思路,而不是一开始就陷于细节的实现上。或者说,一旦你掌握了这些基本的设计思路,就会极大地提高你对get='_blank'>面向对象编程的理解。

用到的技术:封装、继承、多态。

本补充示例的运行效果:

【C#】第3章补充(二)如何将图形作为对象

二、设计步骤

1、新建项目

项目名:WpfAdvanceDemo2

模板:WPF应用程序项目。

2、添加W0_DrawObject.cs文件

鼠标右击解决方案资源管理器中的项目名,选择【添加】->【类】,输入文件名W0_DrawObject.cs,然后将代码改为下面的内容:

using System;using System.Windows;using System.Windows.Controls;using System.Windows.Ink;using System.Windows.Input;using System.Windows.Input.StylusPlugIns;using System.Windows.Media;namespace WpfAdvanceDemo2{  public abstract class W0_DrawObject : DynamicRenderer  {    protected Point previousPoint;    public MyInkCanvas myInkCanvas { get; private set; }    public DrawObjectStroke InkStroke { get; protected set; }    public DrawingAttributes inkDA { get; set; }    public abstract void CreateNewStroke(InkCanvasStrokeCollectedEventArgs e);    public abstract Point Draw(Point first, DrawingContext dc, StylusPointCollection points);    [ThreadStatic]    protected Brush brush = Brushes.Gray;    public W0_DrawObject(MyInkCanvas myInkCanvas)    {      this.myInkCanvas = myInkCanvas;      this.inkDA = myInkCanvas.inkDA.Clone();      this.DrawingAttributes = inkDA;    }    protected override void OnStylusDown(RawStylusInput rawStylusInput)    {      inkDA = myInkCanvas.inkDA.Clone();      this.DrawingAttributes = inkDA;      previousPoint = new Point(double.NegativeInfinity, double.NegativeInfinity);      base.OnStylusDown(rawStylusInput);    }    protected override void OnStylusUp(RawStylusInput rawStylusInput)    {      base.OnStylusUp(rawStylusInput);      this.InkStroke = null;    }  }  public class DrawObjectStroke : Stroke  {    protected W0_DrawObject ink;    public DrawObjectStroke(W0_DrawObject ink, StylusPointCollection stylusPoints)      : base(stylusPoints)    {      this.ink = ink;      this.DrawingAttributes = ink.inkDA.Clone();      this.DrawingAttributes.Color = Colors.Transparent;    }    protected virtual void RemoveDirtyStylusPoints()    {      if (StylusPoints.Count > 2)      {        for (int i = StylusPoints.Count - 2; i > 0; i--)        {          StylusPoints.RemoveAt(i);        }      }    }  }}

原标题:【C#】第3章补充(二)如何将图形作为对象

关键词:C#

C#
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

可能感兴趣文章

我的浏览记录