返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C#实现自定义光标并动态切换
  • 642
分享到

C#实现自定义光标并动态切换

2024-04-02 19:04:59 642人浏览 安东尼
摘要

目录动态切换光标类型自定义光标系统有很多光标类型 :Cursors 类 (System.windows.Input) | Microsoft Docs 本章介绍如何自定义光标、并动态

系统有很多光标类型 :Cursors 类 (System.windows.Input) | Microsoft Docs

本章介绍如何自定义光标、并动态切换光标类型。

动态切换光标类型

以白板书写为例:鼠标操作时,Cursor为红点;触摸时,Cursor为空;

public MainWindow()
    {
        InitializeComponent();
        MouseEnter += (s, e) =>
        {
            ShowMouseCursor(e);
        };
        MouseMove += (s, e) =>
        {
            ShowMouseCursor(e);
        };
        StylusMove += (s, e) =>
        {
            ShowNoneCursor();
        };
    }

设置光标显示:

private void ShowNoneCursor()
    {
        if (Cursor == Cursors.None)
        {
            return;
        }
        Cursor = Cursors.None;
        Mouse.UpdateCursor();
    }
    private void ShowMouseCursor(MouseEventArgs e)
    {
        if (e.StylusDevice != null && e.StylusDevice.Id > -1)
        {
            return;
        }
        if (Cursor == GetFillCursor())
        {
            return;
        }
        Cursor = GetFillCursor();
        Mouse.UpdateCursor();
    }
    private Cursor _fillCursor = null;
    private Cursor GetFillCursor()
    {
        return _fillCursor ?? (_fillCursor = CursorHelper.CreateFillCursor());
    }

触摸书写时,会有个默认光标,所以此处把触摸时的光标置空Cursors.None。

Mouse.UpdateCursor()能强制更新光标。当然,不调用这个更新方法肉眼其实也看不出啥。。。

光标切换效果如上,前面一段是用鼠标书写,后面是触摸书写,光标类型有切换。红点光标自定义方案见下方。

自定义光标

自定义一个纯色的圆形光标:

public static Cursor CreateFillCursor(int size = 24, Brush fillBrush = null)
    {
        int unitSize = size / 4;
        var bmp = new Bitmap(size, size);
        using (Graphics g = Graphics.FromImage(bmp))
        {
            g.Clip = new Region(new Rectangle(0, 0, size, size));
            g.SmoothingMode = SmoothingMode.HighQuality;
            g.InterpolationMode = InterpolationMode.HighQualityBicubic;
            using (var pen = new Pen(fillBrush ?? Brushes.Red, unitSize))
            {

                g.DrawEllipse(pen, new Rectangle(unitSize, unitSize, unitSize, unitSize));
            }
        }
        return BitmapCursor.CreateBmpCursor(bmp);
    }

也可以通过图片资源BitmapSource来生成光标:

public static Cursor CreateFromBitmapSource(BitmapSource source)
    {
        var bitmap = BitmapSourceToBitmap(source);
        return BitmapCursor.CreateBmpCursor(bitmap);
    }
    private static Bitmap BitmapSourceToBitmap(BitmapSource source)
    {
        using (var stream = new MemoryStream())
        {
            var e = new BmpBitmapEncoder();
            e.Frames.Add(BitmapFrame.Create(source));
            e.Save(stream);

            var bmp = new Bitmap(stream);

            return bmp;
        }
    }

BitmapCursor:

internal class BitmapCursor : SafeHandle
    {
        public override bool IsInvalid => handle == (IntPtr)(-1);

        public static Cursor CreateBmpCursor(Bitmap cursorBitmap)
        {

            var c = new BitmapCursor(cursorBitmap);

            return CursorInteropHelper.Create(c);
        }
        protected BitmapCursor(Bitmap cursorBitmap)
            : base((IntPtr)(-1), true)
        {
            handle = cursorBitmap.GetHicon();
        }
        protected override bool ReleaseHandle()
        {
            bool result = DestroyIcon(handle);

            handle = (IntPtr)(-1);

            return result;
        }
        [DllImport("user32")]
        private static extern bool DestroyIcon(IntPtr hIcon);
    }

到此这篇关于C#实现自定义光标并动态切换的文章就介绍到这了,更多相关C#光标内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: C#实现自定义光标并动态切换

本文链接: https://lsjlt.com/news/165587.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • C#实现自定义光标并动态切换
    目录动态切换光标类型自定义光标系统有很多光标类型 :Cursors 类 (System.Windows.Input) | Microsoft Docs 本章介绍如何自定义光标、并动态...
    99+
    2024-04-02
  • SpringBoot自定义+动态切换数据源教程
    目录1、添加maven依赖2、配置application.yml3、配置动态数据源4、配置数据源操作Holder5、读取自定义数据源,并配置6、动态切换关键——AOP进行切换7、使用...
    99+
    2024-04-02
  • Flutter 用自定义转场动画实现页面切换
    目录旋转转场动画 缩放转场动画 自定义转场动画 运行效果 fluro 转场动画源码 在使用自定义转场动画前,先扒一扒 fluro 的源码,通过源码可以发现这么一个标准的转场方法: ...
    99+
    2024-04-02
  • Flutter之自定义路由切换动画
    Flutter之自定义路由切换动画 在Flutter中,我们可以通过Navigator来实现路由管理,包括路由的跳转和返回等。默认情况下,Flutter提供了一些简单的路由切换动画,但是有时候我们需要...
    99+
    2023-09-21
    flutter android 动画 职场和发展 学习 经验分享
  • C#对桌面应用程序自定义鼠标光标
    有的时候,一个自定义的鼠标光标能给你的程序增色不少。本文这里介绍一下如何在.net桌面程序中自定义鼠标光标。由于.net的桌面程序分为WinForm和WPF两种,这里分别介绍一下。 ...
    99+
    2024-04-02
  • 切换选项卡时 GoLand IDE 中光标自动转移
    php小编小新今天要为大家介绍的是GoLand IDE中的一个非常实用的功能——切换选项卡时光标自动转移。在编程开发过程中,我们经常需要在多个文件之间进行切换,而每次切换都需要手动移动...
    99+
    2024-02-08
  • SpringBoot自定义动态切换数据源的方法是什么
    本篇内容主要讲解“SpringBoot自定义动态切换数据源的方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“SpringBoot自定义动态切换数据源的方法是什么”吧!1、添加maven依...
    99+
    2023-06-21
  • JavaScript自定义插件实现tabs切换功能
    本文实例为大家分享了JavaScript实现tabs切换功能的具体代码,供大家参考,具体内容如下 自定义插件实现tabs切换功能 这是HTML代码: <script src...
    99+
    2024-04-02
  • C#实现自定义动画鼠标的示例详解
    目录实践过程效果代码实践过程 效果 代码 public partial class Form1 : Form { public Form1() { ...
    99+
    2022-12-20
    C#自定义动画鼠标 C# 动画鼠标 C# 鼠标
  • uniapp自定义验证码输入框并隐藏光标
    目录一. 前言二. 实现思路三. 代码实现四. 过程中遇到的问题一. 前言 先看下使用场景效果图: 点击输入框唤起键盘,蓝框就相当于input的光标,验证码输入错误或者不符合格式要求...
    99+
    2023-02-22
    uniapp验证码输入框 uniapp验证码
  • pygame多种方式实现屏保操作(自动切换、鼠标切换、键盘切换)
    目录一、图片处理(一)图片采集(二)图片装载(三)完整代码二、初始化pygame相关参数(一)设置初始化参数(二)设置为全屏显示:三、核心模块(一)自动切换(二)键盘切换(三)鼠标切...
    99+
    2024-04-02
  • C#怎么对桌面应用程序自定义鼠标光标
    这篇“C#怎么对桌面应用程序自定义鼠标光标”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“C#怎么对桌面应用程序自定义鼠标光标...
    99+
    2023-07-02
  • Android view自定义实现动态进度条
    Android  自定义view实现动态进度条 效果图: 这个是看了梁肖的demo,根据他的思路自己写了一个,但是我写的这个貌似计算还是有些问题,从上面的图就可以...
    99+
    2022-06-06
    view 进度条 动态 Android
  • springboot连接redis并动态切换database的实现方法
    众所周知,redis多有个db,在jedis中可以使用select方法去动态的选择redis的database,但在springboot提供的StringRedisTemplate中...
    99+
    2024-04-02
  • Android实现图片自动切换
    在Android中图片的自动切换不仅可以实现自动切换,而且还可以使用手动切换。而且一般在切换的时候,在图片下方还带有其他内容的切换,用来标记是第...
    99+
    2022-06-06
    自动 图片 Android
  • vue怎么实现动态切换class
    本篇内容介绍了“vue怎么实现动态切换class”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!文件内容----//为item添加不存在的属性...
    99+
    2023-07-04
  • uniapp怎么自定义验证码输入框并隐藏光标
    这篇文章主要讲解了“uniapp怎么自定义验证码输入框并隐藏光标”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“uniapp怎么自定义验证码输入框并隐藏光标”吧!一. 前言点击输入框唤起键盘,...
    99+
    2023-07-05
  • Android利用Theme自定义Activity间的切换动画
    大多Android系统默认Activity间的动画切换效果为,右边滑入,左边滑出;有时候我们的需求可能是要求所有Activity的切换为淡入淡出的效果,这时候就可能需要改变一下...
    99+
    2022-06-06
    activity 动画 Android
  • m1 Mac设置多jdk版本并动态切换的实现
    由于公司项目基于 JDK 1.8,我本地默认安装的是 JDK 10,这样在 idea 中通过 maven 编译的时候各种报错,有点不兼容。为了解决这个问题最好的办法就是再安装一个 1...
    99+
    2024-04-02
  • element-ui实现表格边框的动态切换并防抖
    目录需求实现过程解决抖动抖动原因解决抖动的实现过程再优化后记固定列需求 需求是这样的: 先前的需求,要求表格按UI设计图来,表格无边框。新来的需求,要求能支持表格列宽的能够支持拖动。...
    99+
    2022-11-13
    element-ui表格 表格边框动态切换 表格边框防抖
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作