大家好,欢迎来到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