关于Photosho中若干技术实现方法之提问一:鼠标指针的秘密。该如何处理

关于Photosho中若干技术实现方法之提问一:鼠标指针的秘密。
PS是一款优秀的软件,在很多细节的实现上都做的很完美,鼠标指针就是其一。
用过PS的肯定注意到PS的鼠标指针是会随着用户选择的工具以及鼠标当前的位置作适当的改变,这种改变似乎很容易模仿。
不过由于PS处理的是图像,而我们通常界面中颜色一般不是很丰富的。因此,PS的鼠标指针在外形没有更改时,会动态的出现不同的效果,去适应鼠标指针下部的图像,以让用户更明显的感觉到鼠标指针的位置。举几个例子如下:

 







大家可以看到鼠标的颜色是不断改变的,现在我也想模仿这种功能,不过似乎直接从鼠标上动手有很多困难,想请CSDN的各位朋友多多指点下。



------解决方案--------------------
我觉得它是预先制作好的动态光标 利用这个动态光标 非常容易的实现光标变色或变形

动态光标的显示代码:

Option Explicit
'**********************************动态ANI光标函数
Private Declare Function SetClassLong& Lib "user32" Alias "SetClassLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long)
Private Declare Function LoadCursorFromFile& Lib "user32" Alias "LoadCursorFromFileA" (ByVal lpFileName As String)
Private Const GCL_HCURSOR& = (-12)
Private NewCursor1&, OldCursor1&, AppDisk$
Private Sub Form_Activate()
MsgBox "你现在看到的是一般的白色箭头光标,按下确定后,你就能看到你设定的动态光标,按下任何键退出时,取消动态光标!!"
End Sub

Private Sub Form_Load()
'**********************************设置动态ANI光标
AppDisk = IIf(Right(App.Path, 1) = "\", App.Path, App.Path & "\")
NewCursor1 = LoadCursorFromFile(AppDisk & "dinol.ani")
OldCursor1 = SetClassLong(Me.hwnd, GCL_HCURSOR, NewCursor1)
End Sub

Private Sub Form_Unload(Cancel As Integer)
'**********************************取消动态ANI光标
SetClassLong Me.hwnd, GCL_HCURSOR, OldCursor1
End
End Sub

Private Sub Form_KeyPress(KeyAscii As Integer)
If KeyAscii <> 0 Then Unload Me
End Sub


在你的电脑里面搜一下 .ani 替换代码中的 dinol.ani 放在 app.path