夜闻香原创,转载请保留此信息,万分感谢!
博客: http://hi.baidu.com/clso
论坛: http://clso.xuntan.com
QQ:315514678 E-mail:clso@yahoo.cn
欢迎技术交流!
注意哦,我这里说的手型鼠标是系统的鼠标风格内的手型鼠标,而非将某个鼠标文件打包再显示的哦。
在以前的VB6中,不支持控件的手型鼠标。本以为到了VB.NET了,总该支持了吧?啊呸,还是老毛病!
虽然这种BUG可以通过将某个图标文件加入程序来解决,但如果用户的鼠标主体不同,或者图标的色彩是32位时,就会显示出这种方法的弊端了。
下面,我来教大家如何手动设置控件的“用户系统鼠标主题内的手型鼠标”!!!
如图:

首先新建一个窗体,双击窗体,在窗体的Load事件中加入下面的代码:
Private Sub frmMain_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Me.Cursor = New Cursor(New IntPtr(45))
End Sub
没错,就是这么简单!!!
在WINDOWS系统中,系统当前主题的手型鼠标的图标指针句柄为45,所以我们创建一个新的鼠标指针类型,由于其构造函数需要传递一个句柄类型,我们在新句柄的构造函数中直接传递它的句柄45,然后将本窗体的Cursor属性设置为我们这个新的鼠标指针。
如果你想要让自己的某一个控件的指针为手型,那么只要设置这个控件的Cursor属性就可以了,比如我想让我的窗体中的按钮1和按钮2的指针为手型,代码如下:
Private Sub frmMain_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim c As New Cursor(New IntPtr(45))
Me.Button1.Cursor = c
Me.Button2.Cursor = c
End Sub
真实太容易了!!!
那么,我又该如何将一个资源图标设置为我的窗体的鼠标指针呢?
说实话,这比较复杂。WINXP中支持32位高色彩的鼠标指针,然而在.NET程序中,却不支这么高位的色彩。因此,想要载入32位色彩的鼠标指针,我们需要使用系统的API来我们完成这个过程。
想要从cur或者ico文件中直接加载,请使用LoadCursorFromFile函数。这个函数的VB.NET定义如下:
Declare Function LoadCursorFromFile Lib "user32" Alias "LoadCursorFromFileA" (ByVal lpFileName As String) As IntPtr
我们将这个API函数添加到窗体的空白区域,然后在窗体的Load时间中加入如下代码:
Private Sub frmMain_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim ip As IntPtr = LoadCursorFromFile("D:\WINDOWS\Cursors\blue B\15.cur") '这里的文件路径请自行设置
If ip = IntPtr.Zero Then Return '如果指针载入不成功则退出过程
Dim c As New Cursor(ip) '将指针句柄赋予给新的鼠标指针类型
Me.Cursor = c
End Sub
效果如下:

善于结合系统而使用.NET程序,这才是最高境界~~~