鼠标指针操作

鼠标指针操作可以直接使用 DimcurAsNewC bmp GetHicon 这里为了演示光标的 HotSpot 光标作用点 所以做了些变化 从图中可以看到 光标的作用点 并不是在红色方框的位置 跟踪 HotSpot 属性

大家好,欢迎来到IT知识分享网。

版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。

鼠标指针,鼠标、笔或跟踪球控制其位置在屏幕上的小图片。当用户移动的指针设备时,操作系统将相应地移动鼠标指针。
通常情况下,鼠标指针也称为光标。
1 使用系统默认的鼠标指针
在VB.Net中可以使用窗体或者控件的Cursor属性来设置显示的光标:

鼠标指针操作

 图1 在VS编辑器中修改按钮的Cursor属性

鼠标指针操作

 图2 鼠标放在按钮上显示的光标

【例 1】修改窗体的光标。

    Private Sub btnCustomCursor_Click(sender As Object, e As EventArgs) Handles btnCustomCursor.Click         Me.Cursor = New Cursor("d:\a\Arrow1.cur")     End Sub     Private Sub btnDefaultCursor_Click(sender As Object, e As EventArgs) Handles btnDefaultCursor.Click         Me.Cursor = System.Windows.Forms.Cursors.Default     End Sub

运行结果如下图所示:

鼠标指针操作

 图3 修改后窗体上显示的光标

以上方法存在的问题:
1、只能将光标修改为系统默认的一系列指针中的一种;
2、只能在窗体范围内有效。

2 Cursor类
Cursor类代表用于绘制光标的图像。
Cursor类常用的两个构造函数:
    Public Sub New ( fileName As String )
参数fileName,必须是标准的光标 (.cur) 文件;
    Public Sub New ( handle As IntPtr )
参数handle表示要创建的光标的Windows句柄,在代码中使用Bitmap类的GetHicon方法获得该图像对应的句柄。

【例 2】从图片创建光标。

    Private Sub btnCustomCursor_Click(sender As Object, e As EventArgs) Handles btnCustomCursor.Click         Dim bmpCursor As New Bitmap(64, 64)         Dim g As Graphics = Graphics.FromImage(bmpCursor)         Dim bmp As New Bitmap("d:\lessons\ca1.jpg")         g.DrawImage(bmp, New Point(0, 0))         Dim cur As New Cursor(bmpCursor.GetHicon)         Me.Cursor = cur         g.Dispose()         bmp.Dispose()         bmpCursor.Dispose()     End Sub

运行结果如下图所示:

鼠标指针操作

 图4 从图片生成光标

注意:可以直接使用Dim cur As New Cursor(bmp.GetHicon),这里为了演示光标的HotSpot(光标作用点),所以做了些变化,从图中可以看到,光标的作用点,并不是在红色方框的位置,跟踪HotSpot属性可以得知,这个点的坐标(32,32),图片大小为64*64,所以光标作用点是在图片中心位置。
如果需要恢复系统默认的光标,只需要以下代码即可:

    Private Sub btnDefaultCursor_Click(sender As Object, e As EventArgs) Handles btnDefaultCursor.Click         Me.Cursor = Cursors.Default     End Sub

HotSpot(光标作用点)是按下鼠标时,光标图片在屏幕上实际“点击”的位置,使用默认箭头状鼠标时,光标作用点在箭头尖上,即光标图片左上角。而正如前面所述,载入图片生成光标的HotSpot的位置在图片的中心位置。
如果指定光标作用点,需要使用到以下一个结构和两个API函数:
1、IconInfo结构:
Public Structure IconInfo
     Dim fIcon As Boolean
     Dim xHotspot As Integer
     Dim yHotspot As Integer
     Dim hbmMask As IntPtr
     Dim hbmColor As IntPtr
End Structure
成员fIcon:True表示此结构是图标,False表示此结构是光标。
成员xHotspot:光标在横坐标上的作用点坐标。如果是图标则忽略。
成员yHotspot:光标在纵坐标上的作用点坐标。如果是图标则忽略。
成员hbmMask:对光标无影响。图标的掩码图片。
成员hbmColor:对光标无影响。指定一个图标颜色位图的句柄。
2、Public Declare Function GetIconInfo Lib “user32” (ByVal hIcon As IntPtr, ByRef pIconInfo As IconInfo) As Boolean
说明:取得与光标或图标有关的信息。
参数hIcon:光标或图标句柄。
参数pIconInfo:返回与光标或图标有关的IconInfo结构信息。
3、Public Declare Function CreateIconIndirect Lib “user32” (ByRef pIconInfo As IconInfo) As IntPtr
说明:从IconInfo结构创建一个光标或图标,返回的是一个指向光标或图标的句柄。
参数pIconInfo:包含与光标或图标有关的IconInfo结构信息
通过以下代码实现指定光标的作用点位置:
参考对比的代码:

    Private Sub btnNoCustomCursorHotSpot_Click(sender As Object, e As EventArgs) Handles btnNoCustomCursorHotSpot.Click         Dim bmp As New Bitmap("d:\lessons\cursor.png")         Dim cur As New Cursor(bmp.GetHicon)         Me.Cursor = cur     End Sub

鼠标指针操作

 图5 未指定作用点的光标

指定光标作用点的代码:

    Private Sub btnCustomCursorHotSpot_Click(sender As Object, e As EventArgs) Handles btnCustomCursorHotSpot.Click         Dim bmp As New Bitmap("d:\lessons\cursor.png")         Dim cur As Cursor = CreateCursor(bmp)         Me.Cursor = cur     End Sub     Public Function CreateCursor(ByVal bmp As Bitmap) As Cursor         '指定光标作用点在左上角(0,0)         Dim xHotSpot As Integer = 0         Dim yHotSpot As Integer = 0         Dim hicon As IntPtr         hicon = (bmp.GetHicon)         Dim ii As New IconInfo         GetIconInfo(hicon, ii)         ii.xHotspot = xHotSpot         ii.yHotspot = yHotSpot         ii.fIcon = False         hicon = CreateIconIndirect(ii)         Return New Cursor(hicon)     End Function

鼠标指针操作

 图6 指定作用点的光标

对比图5和图6,可以看到光标作用点位置的不同。

3 使用动态的鼠标指针
Cursor类使用的光标(.cur)是一个静态的光标,对于动态光标(.ani)是无效的。但是可以通过变通的方式来使用动态光标,使用系统的API函数LoadCursorFromFile可以获得动态光标的句柄:
Public Declare Function LoadCursorFromFile Lib “user32” Alias “LoadCursorFromFileA” (ByVal lpFileName As String) As IntPtr
说明:从光标文件创建光标,返回指向光标的句柄。
参数lpFileName:指定光标文件,它可以是静态光标文件(.cur)也可以是动态光标文件(.ani)。
【例 3】创建动态光标。

    Private Sub btnCustomCursor_Click(sender As Object, e As EventArgs) Handles btnCustomCursor.Click         Dim pCursor As IntPtr         pCursor = LoadCursorFromFile("D:\lessons\sword.ani")         Dim cur As New Cursor(pCursor)         Me.Cursor = cur     End Sub

运行结果如下图所示:

鼠标指针操作

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/152259.html

(0)
上一篇 2025-03-09 15:33
下一篇 2025-03-09 15:45

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信