在winform的控件上面如何使用彩色的鼠标指针

       给项目的图表做了一个手工具,用来拖动图表(类似photoshop里面的手工具)。  但是把Chart鼠标指针换成找来的手指针以后运行程序以后,原本蓝色的指针却在图标上面显示出来却是黑白的了,丑的要死。
       改变默认指针我用的是这行代码:
Chart.Cursor = new Cursor("hand.cur");     其中"hand.cur" 是手指针文件名。

      当时我就很疑惑不解,为什么彩色的指针变成黑白的了呢? 是不是指针文件本身的问题? 简单建了一个html然后设置<body style="cursor:("hand.cur");" > 后发现我的hand.cur文件没有问题,在IE浏览器里能正确的显示。
      是不是System.Windows.Forms.Cursor 不支持彩色的指针?或者在Windows Form Control不支持彩色的指针。试着去控制面板把系统的默认指针改成彩色的另一套,然后吧鼠标指到新建的一个空白form上面,发现彩色的指针能够在win form 上面显示。

      可能出现问题的范围越缩越小,看来问题在于.net framework了。因为调用unmanage code 是肯定可以设置彩色指针的(刚才的测试),估计是framework 包裹unmanage 代码(windows API)的时候改了cursor的颜色位数(16,128,256之类)。 于是我想到了去Cursor里面找这个类都调用了哪些非托管代码来设置指针。
      Cursors 静态类里面定义的默认Cursor可以用彩色的。于是打开Cursors.cs的源码来看,Cursors的静态属性里面实际上调用了Cursor的internal Constructor 来实例化Cursor然后返回。Cursor 类有很多个contructor,而Cursors 的静态属性里面调用的是 Cursor(IntPtr) 这个构造函数。而我之前调用的却是Cursor(string fileName)。 基本上可以说是这几个构造函数造成的差异了,既然Cursors里面的静态属性可以返回有颜色的指针,那么我也调用同样的构造函数试试看吧。
      首先,我在visual studio里面创建了一个新的icon文件。然后吧我的彩色指针同样用vs打开,复制图像到icon里面去保存。
然后:

    
            icoHand1  =   new  Icon(GetType(),  " cursors.hand1.ico " );
            icoHand2 
=   new  Icon(GetType(),  " cursors.hand2.ico " );

            curHand 
=   new  Cursor(icoHand1.Handle);
            curDrag 
=   new  Cursor(icoHand2.Handle);

       创建icon实例,然后创建指针实例。把windows 的pointer 指定给Cursor的构造函数,然后我的彩色指针就能显示出来了。
       还有一点要注意的是,如果程序运行离开了这个函数的scope以后,icoHand1, icoHand2 会被GC 收集掉, 然后你的cursor就会指向空指针。所以我吧icoHand1,2定义在函数外面,变成这个类的一个member variable。 这样子就不会出现icon在cursor之前被收集掉的情况了。


唉,高中语文没有学好啊。到现在想写一篇文章都这么难,读者应该很难理解吧。

转载于:https://www.cnblogs.com/yangching/archive/2008/04/08/1136720.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值