鼠标指针样式修改(界面或控件)&素材调用方法(引用&嵌入)

[引用自百度知道] (https://zhidao.baidu.com/question/551948077

一,程序界面或控件(picturebox,button等)中的鼠标指针样式修改方法

1,VS中可以调用windows自带的几种鼠标指针形状,只要在Form或控件的属性里,将cursor属性从Default,设置成想要的样式即可(十字形,手形等)

2,自定义或下载的鼠标指针样式可以使用下面的代码,将自己的鼠标样式应用在Form或者控件中,注意cur素材文件路径有绝对和相对两种方式(引用素材方法:)

PicCodemage.Cursor = new Cursor(@"c:\03.cur")//PicCodemege可以是Form名和控件名,将其鼠标指针属性实例化为绝对路径C盘根目录下的03.cur文件。
//或者
PicCodemage.Cursor = new Cursor("../../pic/03.cur");//使用相对目录,默认是在工程的Debug目录下,所以使用两次“../”向上返回两级目录(C:\Users\Administrator\Desktop\新建文件夹\WFA2练习\WFA2练习\bin\Debug),进入WFA2练习中的素材文件夹pic,调用内部的03.cur文件。

注意:VS中给工程添加文件夹与素材方法:打开工程,在界面右侧偏上的解决方案资源管理器中,选中工程名,右键,选择添加,新建文件夹,重命名,然后将素材(图片,指针,音乐,图标等)拖动放入该文件夹即可,然后使用代码中的相对路径进行调用。

3.上述方法可以改变鼠标指针形状,无法改变其颜色,可使用引用中的方法来实现引入外来素材样式

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Threading;
using System.Diagnostics;
//这两条需要引用
using System.Runtime.InteropServices;
using System.Reflection;

namespace WFA2练习
{
    public partial class Form1 : Form
    {
        //这两行代码需要添加
        [DllImport("user32.dll")]
        static extern IntPtr LoadCursorFromFile(string fileName);
        public Form1()
        {
            InitializeComponent();
            //绝对路径(无法改颜色)
            //Cursor Cur = new Cursor(@"C:\03.cur");
            //相对路径(无法改颜色)
            //Cursor Cur = new Cursor("../../pic/03.cur");
            //this.Cursor = Cur;
            //以下代码为实现方法,现在看不懂,只知道能用
            Cursor customCursor = new Cursor(Cursor.Current.Handle);
            IntPtr customCursorHandle = LoadCursorFromFile("../../pic/03.cur");
            customCursor.GetType().InvokeMember("handle", BindingFlags.Public |
            BindingFlags.NonPublic | BindingFlags.Instance |
            BindingFlags.SetField, null, customCursor,
            new object[] { customCursorHandle });
            //this.Cursor = customCursor;//将样式赋予Form
            pictureBox1.Cursor = customCursor;//将样式赋予控件
        }

二,根据控件中接收变量不同,切换鼠标指针样式
1,在接收变量后判断,或在控件需要显示时判断,使用上面第三种方法

//添加引用
using System.Runtime.InteropServices;
using System.Reflection;

namespace ImageStaff
{
    public partial class Main : Form
    {
        //在Form种添加这两行
        [DllImport("user32.dll")]
        static extern IntPtr LoadCursorFromFile(string fileName);
                    //省略中间代码
                    //在图像控件赋值后面添加方法
                    #region 图像控件赋值
                    nowImage = (Image)TopicInfo.Image.Clone();
                    nowTopic = TopicInfo;
                    //添加判断图片类型改变指针形状的语句
                    if (TopicInfo.TypeId.ToString()=="6137")//判断条件
                    {
                        Cursor customCursor = new Cursor(Cursor.Current.Handle);
                        //IntPtr customCursorHandle = LoadCursorFromFile("C:\\03.cur");
                        IntPtr customCursorHandle = LoadCursorFromFile("../../pic/03.cur");
                        customCursor.GetType().InvokeMember("handle", BindingFlags.Public |
                        BindingFlags.NonPublic | BindingFlags.Instance |
                        BindingFlags.SetField, null, customCursor,
                        new object[] { customCursorHandle });
                        PicCodemage.Cursor = customCursor;
                    }
                    else
                    {
                        PicCodemage.Cursor = Cursors.Default;//使用默认样式
                    }

二,素材嵌入可执行文件(exe)方法

参考自新浪微博
上述一,二,两种方法,需要固定素材路径,并将素材文件夹一起与可执行文件打包后,才能移动至其他电脑上使用。可以使用C#的资源类,新建资源类(Resource1.resx)将素材添加进去后,使用“资源类名.资源名”来进行调用,这样编译好后,exe文件内部就包含了所有的素材文件。
注意事项:C#资源类可以直接导入并调用名称使用的只有图片与文本(音频wav格式也可以),其他文件需要使用内存流读取,并生成相应的文件后,才能调用,例如:光标素材(cur)等。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Threading;
using System.Diagnostics;
//这两条需要引用
using System.Runtime.InteropServices;
using System.Reflection;
//使用内存流读取素材时用到
using System.IO;

namespace WFA2练习
{
    public partial class Form1 : Form
    {
        //从资源文件中读取光标文件,保存成一个临时文件(什么名字什么扩展名都可以)zxb.temp
        public static Cursor getCursorFromResource(byte[] resource)
        {
            byte[] b = Resource1.cur04;
            FileStream fileStream = new FileStream("zxb.dat", FileMode.Create);
            fileStream.Write(b, 0, b.Length);
            fileStream.Close();
            Cursor cur = new Cursor(LoadCursorFromFile("zxb.dat"));
            return cur;
        }
        //这两行代码需要添加
        [DllImport("user32.dll")]
        static extern IntPtr LoadCursorFromFile(string fileName);
        public Form1()
        {
            InitializeComponent();
            //绝对路径(无法改颜色)
            //Cursor Cur = new Cursor(@"C:\03.cur");
            //相对路径(无法改颜色)
            //Cursor Cur = new Cursor("../../pic/03.cur");
            //this.Cursor = Cur;
            //直接使用下面的方法(样式固定),或者在判断语句种使用(可根据条件变换样式)
            //Cursor customCursor = new Cursor(Cursor.Current.Handle);
            //IntPtr customCursorHandle = LoadCursorFromFile("../../pic/03.cur");
            //customCursor.GetType().InvokeMember("handle", BindingFlags.Public |
            //BindingFlags.NonPublic | BindingFlags.Instance |
            //BindingFlags.SetField, null, customCursor,
            //new object[] { customCursorHandle });
            ////this.Cursor = customCursor;
            //pictureBox1.Cursor = customCursor;
        }
        private Bitmap bit1;//上提示图片(图片1)

        private void button1_Click(object sender, EventArgs e)
        {
            if (this.openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                string path = this.openFileDialog1.FileName;//获得图片路径
                bit1 = new Bitmap(path);
                this.pictureBox1.Image = bit1;
                //加入条件判断是否改变鼠标指针样式
                if (pictureBox1.Image != null)
                {   //使用资源文件时,直接读取嵌入的鼠标文件,然后显示即可
                    //Cursor customCursor = new Cursor(Cursor.Current.Handle);
                    //IntPtr customCursorHandle = LoadCursorFromFile("../../pic/03.cur");
                    Cursor newCur = getCursorFromResource(Resource1.cur04);
                    //IntPtr customCursorHandle = LoadCursorFromFile("newCur");
                   // customCursor.GetType().InvokeMember("handle", BindingFlags.Public |
                   // BindingFlags.NonPublic | BindingFlags.Instance |
                   // BindingFlags.SetField, null, customCursor,
                   //new object[] { customCursorHandle });
                    //this.Cursor = customCursor;
                    pictureBox1.Cursor = newCur;
                }
                else 
                {
                    pictureBox1.Cursor = Cursors.Default;
                }

            }
        }

        private void button2_Click(object sender, EventArgs e)
        {
            if (pictureBox1.Image!=null)
            {
                Color c = new Color();
                //Bitmap b = new Bitmap(pictureBox1.Image);
                Bitmap b1 = new Bitmap(pictureBox1.Image);
                int rr, gg, bb, cc;

                for (int i = 0; i < bit1.Width; i++)
                {

                    for (int j = 0; j < bit1.Height; j++)
                    {
                        c = bit1.GetPixel(i, j);
                        rr = c.R;
                        gg = c.G;
                        bb = c.B;
                        cc = (int)((rr + gg + bb) / 3);
                        if (cc < 0)
                            cc = 0;
                        if (cc > 255)
                            cc = 255;
                        //用FromArgb把整形转换成颜色值
                        Color c1 = Color.FromArgb(cc, cc, cc);
                        b1.SetPixel(i, j, c1);
                    }
                        //pictureBox2.Refresh();
                        //pictureBox2.Image = b1;
                        //b1.Save(@"C:\Users\Administrator\Desktop\gray.jpg");
                }
                    pictureBox2.Refresh();
                    pictureBox2.Image = b1;
                    b1.Save(@"C:\Users\Administrator\Desktop\gray.jpg");
            }
        }

    }
}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,711评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,932评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,770评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,799评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,697评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,069评论 1 276
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,535评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,200评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,353评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,290评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,331评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,020评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,610评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,694评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,927评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,330评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,904评论 2 341

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,266评论 25 707
  • 1、窗体 1、常用属性 (1)Name属性:用来获取或设置窗体的名称,在应用程序中可通过Name属性来引用窗体。 ...
    Moment__格调阅读 4,457评论 0 11
  • Ubuntu的发音 Ubuntu,源于非洲祖鲁人和科萨人的语言,发作 oo-boon-too 的音。了解发音是有意...
    萤火虫de梦阅读 99,091评论 9 467
  • 母亲是那种特别能干的女人,周围人有什么麻烦事,都请她去解决;每逢小办喜事,也请她去烧菜。而我,最喜欢她做的酥肉...
    妖媚儿阅读 587评论 0 0
  • 我常常问面试者,“你最喜欢的编程语言是什么?” 答案几乎如出一辙,“工作中我只选择正确的编程语言。” 废话,谁会故...
    Qingniu阅读 9,455评论 19 104