• C# .Net中鼠标Cursor的公用辅助类


    有时,我们需要将背景透明的png或gif格式图片生成的Cursor,甚至将其旋转后生成旋转效果的Cursor(可指定热点)。

    直接上源码:

    using System;
    using System.IO;
    using System.Reflection;
    using System.Windows.Forms;
    using System.Drawing;

    namespace CommonUtils.Common
    {
        ///


        /// Cursor的公用辅助类
        ///

        public class CursorUtil
        {
            ///
            /// 从资源文件中调用指定名称的Cursor图标
            ///

            /// Cursor图标的名称
            /// Cursor图标
            public static Cursor GetCursorByResourceName(string cursorName)
            {
                using (Stream resStream = Assembly.GetExecutingAssembly().GetManifestResourceStream(cursorName))
                {
                    return new Cursor(resStream);
                }
            }

            ///


            ///用背景透明的png或gif格式图片生成的Cursor
            /// 用法:
            /// Bitmap a=(Bitmap)Bitmap.FromFile("myCur.png");
            /// GetCursor(a, new Point(0, 0));
            ///

            /// 背景透明的png或gif格式图片
            /// 热点
            /// Cursor图标
            public static Cursor GetCursor(Bitmap cursorImg, Point hotPoint)
            {
                return GetRotatedCursor(cursorImg, hotPoint, 0);
            }

            ///


            /// 用背景透明的png或gif格式图片生成,并指定旋转角度的Cursor
            /// 用法:
            /// Bitmap a=(Bitmap)Bitmap.FromFile("myCur.png");
            /// GetRotatedCursor(a, new Point(0, 0),30f);
            ///

            /// 背景透明的png或gif格式图片
            /// 热点 
            /// 指定Cursor图片的旋转角度
            /// Cursor图标
            public static Cursor GetRotatedCursor(Bitmap cursorImg, Point hotPoint, float rotationAngle)
            {
                int hotX = hotPoint.X;
                int hotY = hotPoint.Y;
                Bitmap cursorBmp = new Bitmap(cursorImg.Width * 2 - hotX, cursorImg.Height * 2 - hotY);
                Graphics g = Graphics.FromImage(cursorBmp);
                g.Clear(Color.FromArgb(0, 0, 0, 0));
                //旋转指定角度
                if(rotationAngle!=0) g.RotateTransform(rotationAngle);
                g.DrawImage(cursorImg, cursorImg.Width - hotX, cursorImg.Height - hotY, cursorImg.Width, cursorImg.Height);
                Cursor result = new Cursor(cursorBmp.GetHicon());
                g.Dispose();
                cursorBmp.Dispose();

                return result;
            }

            ///


            /// 用背景透明的png或gif格式图片生成,并指定旋转角度的Cursor
            /// 用法:
            /// Bitmap a=(Bitmap)Bitmap.FromFile("myCur.png");
            /// GetRotatedCursor(a, new Point(0, 0),30f);
            ///

            /// 背景透明的png或gif格式图片
            /// 热点 
            /// 指定Cursor图片的旋转角度
            /// Cursor图标
            public Cursor GetRotatedCursor(byte[] curFileBytes, Point hotPoint, float rotationAngle)
            {
                var origStream = new MemoryStream(curFileBytes);
                var cursorImg = new System.Drawing.Icon(origStream).ToBitmap();
                return GetRotatedCursor(cursorImg,  hotPoint,  rotationAngle);
            }
        }
    }

  • 相关阅读:
    第18章Swing程序设计
    java 基于ssm+vue的公务员报名信息管理系统 elementui
    设计模式-装饰器模式
    英伟达两个最新元宇宙布局
    LeetCode HOT 100 —— 23.合并K个升序链表
    MySQL快速安装(mysql8.0.30区别之前yum安装)
    删除链表中的重复元素
    彻底掌握Makefile(二)
    oracle导出问题:ORA-00904: “POLTYP“: 标识符无效
    vue假数据制作渲染
  • 原文地址:https://blog.csdn.net/johnsuna/article/details/126704245