源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

用C# 实现鼠标框选效果的实现代码

  • 时间:2020-11-05 14:47 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:用C# 实现鼠标框选效果的实现代码
[b]实现步骤:[/b] 1.实现整个鼠标框选的几个事件(down、move、up),当鼠标点下记录鼠标框选的起点,鼠标抬起结束操作。 2.以鼠标框选过程中获取的鼠标坐标为基点计算框选的矩形的4点坐标,4点坐标以顺时针方向布点。 3.通过Shape.Path类实现在类上画出此矩形。 代码如下:
[u]复制代码[/u] 代码如下:
namespace HostDemo {  public class HostCanvas : Canvas {   public HostCanvas() {    InitializeComponent();   }   private void InitializeComponent() {    this.Loaded += OnLoad;    this.MouseDown += OnMouseDown;    this.MouseMove += OnMouseMove;    this.MouseUp += OnMouseUp;    locus = new Path();    locus.Fill = new SolidColorBrush(Color.FromArgb(1, 255, 255, 255));    locus.Stroke = Brushes.Red;    locus.StrokeThickness = 1;    locus.IsManipulationEnabled = true;   }   void OnMouseUp(object sender, System.Windows.Input.MouseButtonEventArgs e) {    ispath = false;   }   void OnMouseMove(object sender, System.Windows.Input.MouseEventArgs e) {    if(ispath){     endpoint = e.GetPosition(this);     locus.Data = DrawingRect(startpoint,endpoint);    }   }   void OnMouseDown(object sender, System.Windows.Input.MouseButtonEventArgs e) {    if(!this.Children.Contains(locus)) this.Children.Add(locus);    if (locus.Data != null) locus.Data = null;    startpoint = e.GetPosition(this);    ispath = true;   }   void OnLoad(object sender, System.Windows.RoutedEventArgs e) {    this.Background = new SolidColorBrush(Color.FromArgb(35, 255, 255, 255));   }   private PathGeometry DrawingRect(Point beginpoint, Point closepoint) {    PathGeometry result = new PathGeometry();     PathFigure figure = new PathFigure();    figure.IsClosed = true;    figure.StartPoint = beginpoint;    PathSegmentCollection pathSegmentCollection = new PathSegmentCollection();    PathFigureCollection pathFigureCollection = new PathFigureCollection();      LineSegment m1 = new LineSegment();    m1.Point = new Point(closepoint.X, beginpoint.Y);    LineSegment m2 = new LineSegment();    m2.Point = closepoint;    LineSegment m3 = new LineSegment();    m3.Point = new Point(beginpoint.X, closepoint.Y);    pathSegmentCollection.Add(m1);    pathSegmentCollection.Add(m2);    pathSegmentCollection.Add(m3);    figure.Segments = pathSegmentCollection;    pathFigureCollection.Add(figure);    result.Figures = pathFigureCollection;    return result();   }   private Path locus;   private bool ispath = false;   private Point startpoint;   private Point endpoint;  } }
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部