用C# 实现鼠标框选效果的实现代码
时间:2023-04-18 14:08:26
实现步骤:
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;
}
}
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
springmvc请求转发和重定向问题(携带参数和不携带参数)
![](https://img.aspxhome.com/file/2023/3/94223_0s.png)
Android Webview使用小结
详解使用Spring Cloud Consul实现服务的注册和发现
C语言数据结构之二叉树详解
![](https://img.aspxhome.com/file/2023/3/120783_0s.png)
Java解码H264格式视频流中的图片
Android Monkey压力测试详细介绍
![](https://img.aspxhome.com/file/2023/0/137790_0s.png)
java实现日期拆分的方法
java中javamail收发邮件实现方法
![](https://img.aspxhome.com/file/2023/4/68714_0s.png)
C# 使用WPF 用MediaElement控件实现视频循环播放
android shape实现阴影或模糊边效果
![](https://img.aspxhome.com/file/2023/1/137821_0s.png)
android球形水波百分比控件代码
![](https://img.aspxhome.com/file/2023/5/137385_0s.png)
Spring Security保护用户密码常用方法详解
![](https://img.aspxhome.com/file/2023/5/67485_0s.jpg)
SpringBoot搭配AOP实现自定义注解
Java框架MyBatis接口编程过程解析
Android使用WebView.loadUri()打开网页的方法
Android画板开发之橡皮擦功能
![](https://img.aspxhome.com/file/2023/0/99800_0s.gif)
Android Studio升级到3.0后遇到的坑
![](https://img.aspxhome.com/file/2023/3/91643_0s.png)
C#面向对象设计的七大原则
![](https://img.aspxhome.com/file/2023/1/79081_0s.jpg)
C#创建临时文件的方法
Android Studio3.0新特性及安装图文教程
![](https://img.aspxhome.com/file/2023/7/120047_0s.jpg)