C#实现限制鼠标在一个矩形或者圆形区域内工作

这篇具有很好参考价值的文章主要介绍了C#实现限制鼠标在一个矩形或者圆形区域内工作。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

前言

一、界面设计

二、关键技术

1.设置矩形限制区域

2.设置圆形限制区域

3.解除限制

4.效果展示


前言

正常情况下,鼠标的移动范围是整个屏幕,但有时需要鼠标在某一区域内移动,这个区域可以是矩形也可以是圆形,圆形会复杂一点。


一、界面设计

窗体中需要添加三个按钮,分别是设置圆形限制区域,设置矩形限制区域,解除限制,如下图所示:

限制鼠标活动范围,C#WinForm学习,开发语言,c#,windows

二、关键技术

1.设置矩形限制区域

需要先在窗体中画一个矩形,利用Cursor.Clip函数把该区域设置为矩形限制区域。

代码如下:

        /// <summary>
        /// 设置矩形限制区域
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button3_Click(object sender, EventArgs e)
        {
            Graphics gra = this.CreateGraphics();
            gra.Clear(this.BackColor);
            gra.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
            Pen pen = new Pen(Color.Red);//画笔颜色                                
            gra.DrawRectangle(pen, 10, 10, 500, 400);//画矩形的方法
            Point p = this.PointToScreen(new Point(10, 10));//转换为屏幕坐标

            this.Cursor = new Cursor(Cursor.Current.Handle);//创建Cursor对象
            Cursor.Position = new Point(Cursor.Position.X, Cursor.Position.Y);//设置鼠标位置
            Cursor.Clip = new Rectangle(p.X,p.Y, 500, 400);//设置鼠标的活动区域
        }

2.设置圆形限制区域

限制圆形区域需要自己添加限制逻辑,逻辑如下:

在鼠标移动时,需要判断当前位置坐标与圆心坐标之间的距离是否大于半径,如大于半径,则把鼠标坐标设为之前的坐标,反之,则记录当前的坐标。需要添加Form1_MouseMove事件。

代码如下:

        /// <summary>
        /// 圆的中心点
        /// </summary>
        Point PCircleCenter;
        /// <summary>
        /// 圆的半径
        /// </summary>
        int r = 200;
        /// <summary>
        /// 是否限制鼠标
        /// </summary>
        bool flag = false;
        /// <summary>
        /// 设置圆形限制区域
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button1_Click(object sender, EventArgs e)
        {
            Graphics gra = this.CreateGraphics();
            gra.Clear(this.BackColor);
            gra.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
            Pen pen = new Pen(Color.Red);//画笔颜色                                
            gra.DrawEllipse(pen, 10, 10, r*2, r*2);//画椭圆的方法

            flag = true;//限制鼠标的标志位
            PCircleCenter = this.PointToScreen(new Point(10 + r, 10 + r));//把圆心坐标转换为屏幕坐标
            Cursor.Position = PCircleCenter;
        }
        /// <summary>
        /// 旧的鼠标坐标
        /// </summary>
        Point OldMousePosition;
        private void Form1_MouseMove(object sender, MouseEventArgs e)
        {
            if (flag)
            {
                Point PX = Control.MousePosition;//获取当前鼠标坐标
                double S = Math.Sqrt(Math.Pow(PX.X - PCircleCenter.X, 2) + Math.Pow(PX.Y - PCircleCenter.Y, 2));//计算当前坐标与圆心坐标之间的距离
                if (S > r)
                    Cursor.Position = OldMousePosition;
                else
                    OldMousePosition = PX;
            }
            else
            {

            }
        }

3.解除限制

代码如下:

        /// <summary>
        /// 解除鼠标活动区域的限制
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button2_Click(object sender, EventArgs e)
        {
            flag = false;//限制鼠标标志位复位
            Screen[] screens = Screen.AllScreens;//获取显示的数组
            this.Cursor = new Cursor(Cursor.Current.Handle);//创建Cursor对象
            Cursor.Clip = screens[0].Bounds;//解除鼠标活动区域的限制

        }

4.效果展示

限制鼠标活动范围,C#WinForm学习,开发语言,c#,windows


 

成功把鼠标限制在圆形或者矩形区域内。文章来源地址https://www.toymoban.com/news/detail-594934.html

到了这里,关于C#实现限制鼠标在一个矩形或者圆形区域内工作的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 使用c#实现一个简单绘图软件(绘制矩形、多边形,画笔、橡皮擦功能)的完整教程

    c#是微软提供的用于开发windows软件的开发语言,可以使用其快速的实现windows桌面软件的开发。这里基于C#开发了一款简单的绘图软件,可以用于绘制矩形、多边形的绘制(基于这些可以实现自己的数据标注软件),还实现了画笔、橡皮擦功能。开发C#软件通常使用Visual Studio软

    2024年02月03日
    浏览(63)
  • Unity常用方法--Physics2D.OverlapCircleAll(获取一个圆形区域内所有碰撞器的列表)

    使用方式请直接看参考文献 使用案例 可以通过该方法判断在攻击范围内是否存在敌人,并在存在时,调用敌人组件的内部函数 代码 参考文献   https://docs.unity3d.com/cn/current/ScriptReference/Physics2D.OverlapCircleAll.html

    2024年04月10日
    浏览(34)
  • processing判断一个点是否在三角形、圆、椭圆、矩形内(超详细鼠标交互)

    刚好最近在学processing,然后有不少同学遇到一个问题哈, 就是如何用processing判断一个点是否在三角形、圆、椭圆、矩形内,并且联合arduino一起,通过串口通信实现用户在processing发生点击事件,然后通过arduino开发板反馈(亮灯等等) ,这一期我就先出如何解决利用processi

    2023年04月10日
    浏览(39)
  • android:绘制圆角矩形,椭圆形

    一、前言:在我们工作中会有绘制不同圆角的按钮图形,具体该怎么做之前也只是了解个大概,今天看了一节课,听完老师讲的我自己又写了一遍,记录一下。 二、代码展示: 首先先创建一个DrawableShapeActivity 相对应的xml 以及两个形状xml:shape_oval_rose.xml shape_ract_gold.xml

    2024年02月06日
    浏览(41)
  • OpenCV(十三):图像中绘制直线、圆形、椭圆形、矩形、多边形和文字

    目录 1.绘制直线line() 2.绘制圆形circle() 3.绘制椭圆形ellipse()  4.绘制矩形rectangle() 5.绘制多边形 fillPoly()  6.绘制文字putText() 7.例子 1.绘制直线line() img:绘制圆形的图像 ptl:直线起始点在图像中的坐标 pt2: 直线终点在图像中的坐标 color:圆形的颜色,用三通道表示 thickness:轮廓的宽

    2024年02月09日
    浏览(63)
  • Unity3D Shader 引导遮罩,支持圆形、矩形、圆角矩形框

    unity3D新手引导遮罩,支持圆形,矩形框,圆角矩形框。图形位置和大小可以根据控件的位置和大小调节,通用所有分辨率设备。黄色区域遮挡,只有白色区域可以点穿。 原文链接:https://www.kadastudio.cn/archives/89 ​ 将MyGuideMask挂载到脚本上,然后通过GuideMask创建材质并赋值,根据

    2024年02月11日
    浏览(50)
  • Qt之QPainter绘制多个矩形/圆形(含源码+注释)

    下图绘制的是矩形对象,但是将绘制矩形函数(drawRect)更改为绘制圆形(drawEllipse)即可绘制圆形。 绘制矩形需要自然要获取矩形数据,因此通过鼠标事件获取每个矩形的rect数据(鼠标按下为起始点,鼠标释放为结束点;每次移动时的当前位置做结束点,并实时刷新,实现

    2023年04月25日
    浏览(117)
  • OpenCV(10): 轮廓近似—多边形拟合,边界矩形与边界圆形

    轮廓近似(Contour Approximation)是指对轮廓进行逼近或拟合,得到近似的轮廓。在图像处理中,轮廓表示了图像中物体的边界,因此轮廓近似可以用来描述和识别物体的形状。 多边形拟合(Approximating Polygons)是将轮廓逼近成一个由直线段构成的多边形。常见的有最小包围矩形

    2024年02月10日
    浏览(47)
  • Python OpenCV实现鼠标绘制矩形框和多边形

    目录 Python OpenCV实现鼠标绘制矩形框和多边形 1. OpenCV鼠标事件操作说明 (1)setMouseCallback函数说明 (2)回调函数onMouse说明 (3)event 具体说明: (4)flags 具体说明 2. OpenCV实现鼠标绘制矩形框和多边形框 (1)绘制矩形框 (2)绘制多边形 (3)键盘控制 3. 完整的代码 本篇将

    2024年02月06日
    浏览(76)
  • 【Unity实战篇 】| 游戏中实现镂空遮罩效果【矩形、圆形镂空遮罩】

    前言 本文来写一下怎样在Unity中完成一个 镂空遮罩 的效果。 镂空遮罩 比较常用的有两种ÿ

    2024年02月15日
    浏览(128)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包