strMediaPath是你的光标文件路径 如:strMediaPath ="D:\Resource\" Public Const OCR_NORMAL = 32512 Declare Function LoadCursorFromFile Lib "user32" Alias "LoadCursorFromFileA" (ByVal lpFileName As String) As Long Public Declare Function SetSystemCursor Lib "user32" (ByVal hcur As Long, _ ByVal id As Long) As Long Public Declare Function LoadCursor Lib "user32" Alias "LoadCursorA" _ (ByVal hInstance As Long, ByVal lpCursorName As Long) As Long 1、显示手形光标 Public HandMouse As StdPicture '手形鼠标光标 Set HandMouse = LoadPicture(strMediaPath + "H_point.cur") Command1.MousePointer = vbCustom '鼠标光标变为手形状 Command1.MouseIcon = HandMouse如果将H_point.cur转换成H_point.ico,一样可以用 不过在有的时候,将导致光标闪烁或不可见,而H_point.cur就没有这个问题。 这种方法将会丢失光标的颜色信息,即只能显示黑白两种颜色。2、显示彩色光标 Private ArrowMouse As Long ArrowMouse = LoadCursorFromFile(strMediaPath + "bluearrow.cur") Call SetSystemCursor(ArrowMouse , OCR_NORMAL)这样可以显示彩色光标,但同样有闪烁现象。3、显示动画光标 Private AniMouse As Long AniMouse = LoadCursorFromFile(strMediaPath + "globe.ani") Call SetSystemCursor(AniMouse , OCR_NORMAL)
//这个我已经知道了,但是你试试不要用SetSystemCursor,用SetCursor就不行了用setcursor一样没有问题: Private Sub Command1_Click() Dim hCursor As String Dim hOldCursor As Long Dim retval As Long
hCursor = LoadCursorFromFile("E:\WINDOWS\Cursors\banana.ani") If hCursor = 0 Then MsgBox "no luck" Else hOldCursor = SetCursor(hCursor) Sleep 3000 retval = SetCursor(hOldCursor) End If End Sub
不过,对于这样的问题,我不建议使用setcursor,我建议使用setclasslong实现,使用它的好处是可以指定具体的窗口显示自定义的cursor: Option Explicit Private Declare Function LoadCursorFromFile Lib "user32.dll" Alias "LoadCursorFromFileA" (ByVal lpFileName As String) As Long Private Declare Function SetClassLong Lib "user32" Alias "SetClassLongA" _ (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As LongConst GCL_HCURSOR = (-12) Dim hOldCursor As LongPrivate Sub Command1_Click() Dim hNewCursor As Long hNewCursor = LoadCursorFromFile("E:\WINDOWS\Cursors\banana.ani") '設定讀取動態游標 hOldCursor = SetClassLong(hwnd, GCL_HCURSOR, hNewCursor)End SubPrivate Sub Command2_Click() hOldCursor = SetClassLong(hwnd, GCL_HCURSOR, hOldCursor) '設定回復到之前使用的 Cursor End SubPrivate Sub Form_Unload(Cancel As Integer) hOldCursor = SetClassLong(hwnd, GCL_HCURSOR, hOldCursor) ' Unload 時 , 設定回復到之前使用的 CursorEnd Sub
如:strMediaPath ="D:\Resource\"
Public Const OCR_NORMAL = 32512
Declare Function LoadCursorFromFile Lib "user32" Alias "LoadCursorFromFileA" (ByVal lpFileName As String) As Long
Public Declare Function SetSystemCursor Lib "user32" (ByVal hcur As Long, _
ByVal id As Long) As Long
Public Declare Function LoadCursor Lib "user32" Alias "LoadCursorA" _
(ByVal hInstance As Long, ByVal lpCursorName As Long) As Long
1、显示手形光标
Public HandMouse As StdPicture '手形鼠标光标
Set HandMouse = LoadPicture(strMediaPath + "H_point.cur")
Command1.MousePointer = vbCustom '鼠标光标变为手形状
Command1.MouseIcon = HandMouse如果将H_point.cur转换成H_point.ico,一样可以用
不过在有的时候,将导致光标闪烁或不可见,而H_point.cur就没有这个问题。
这种方法将会丢失光标的颜色信息,即只能显示黑白两种颜色。2、显示彩色光标
Private ArrowMouse As Long
ArrowMouse = LoadCursorFromFile(strMediaPath + "bluearrow.cur")
Call SetSystemCursor(ArrowMouse , OCR_NORMAL)这样可以显示彩色光标,但同样有闪烁现象。3、显示动画光标
Private AniMouse As Long
AniMouse = LoadCursorFromFile(strMediaPath + "globe.ani")
Call SetSystemCursor(AniMouse , OCR_NORMAL)
Private Sub Command1_Click()
Dim hCursor As String
Dim hOldCursor As Long
Dim retval As Long
hCursor = LoadCursorFromFile("E:\WINDOWS\Cursors\banana.ani")
If hCursor = 0 Then
MsgBox "no luck"
Else
hOldCursor = SetCursor(hCursor)
Sleep 3000
retval = SetCursor(hOldCursor)
End If
End Sub
Option Explicit
Private Declare Function LoadCursorFromFile Lib "user32.dll" Alias "LoadCursorFromFileA" (ByVal lpFileName As String) As Long
Private Declare Function SetClassLong Lib "user32" Alias "SetClassLongA" _
(ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As LongConst GCL_HCURSOR = (-12)
Dim hOldCursor As LongPrivate Sub Command1_Click() Dim hNewCursor As Long hNewCursor = LoadCursorFromFile("E:\WINDOWS\Cursors\banana.ani") '設定讀取動態游標
hOldCursor = SetClassLong(hwnd, GCL_HCURSOR, hNewCursor)End SubPrivate Sub Command2_Click()
hOldCursor = SetClassLong(hwnd, GCL_HCURSOR, hOldCursor) '設定回復到之前使用的 Cursor
End SubPrivate Sub Form_Unload(Cancel As Integer) hOldCursor = SetClassLong(hwnd, GCL_HCURSOR, hOldCursor) ' Unload 時 , 設定回復到之前使用的 CursorEnd Sub
用SetSystemCursor时当鼠标变成不可用样式时,那个第二个参数不知用什么,好像都不行,
用setCursor时只有sleep时鼠标才那种样式,之后即使没有这句
retval = SetCursorhOldCursor)
也会变回来,我想可能是自动被windows重载了,怎么能让他一直是我设定的样式呢
截获消息吗?大哥真厉害,什么都知道