• C# 实现鼠标框选效果


    实现步骤:

    1.实现整个鼠标框选的几个事件(down、move、up),当鼠标点下记录鼠标框选的起点,鼠标抬起结束操作。

    2.以鼠标框选过程中获取的鼠标坐标为基点计算框选的矩形的4点坐标,4点坐标以顺时针方向布点。

    3.通过Shape.Path类实现在类上画出此矩形。

    代码如下:

    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;
     }
    }

        转载时,请注明本文来源:www.cnblogs.com/tmywu

      

      作者: 淘米部落

        mail:tommywu23@126.com

  • 相关阅读:
    vue项目-百度地图-初始化展示覆盖范围(默认中心点和半径),点击切换中心点,地图落点(带数字)
    echarts地图下钻(全国到省)下钻一次
    JSON取值(key是中文或者数字)方式详解
    Chrome 80跨域cookie无法携带
    将博客搬至CSDN
    Django模板渲染,运行时如果报错:TemplateDoesNotExist at
    使用allure serve查看报告提示allure-results does not exists的解决方法
    jupyter lab不能自动打开浏览器和默认打开chrome浏览器的解决办法
    Chrome浏览器安装SwitchyOmega_Chromium插件,以及导入Burp Suite证书,抓取https请求包
    vue安装
  • 原文地址:https://www.cnblogs.com/tmywu/p/2635637.html
Copyright © 2020-2023  润新知