好像按键精灵有一个GetCursorShape()函数可以获取特征码,不知道VB6能不能实现类似的功能?
附注:
1 最好是机器无关的,不是也可以。
2 特征码就是一串数字,用来区分不同的鼠标形状。
3 获取鼠标形状的位图的操作已经实现,现在就是如何通过这个位图来获取特征码。
4 目前我的实现方法是将位图的Byte数组转换为二进制,然后获取1和0的个数,最后相加获得特征码,有没有比这种方式更好的方法呢?若能提供帮助,小弟我感激不尽。
vbbyteGetCursorShape
附注:
1 最好是机器无关的,不是也可以。
2 特征码就是一串数字,用来区分不同的鼠标形状。
3 获取鼠标形状的位图的操作已经实现,现在就是如何通过这个位图来获取特征码。
4 目前我的实现方法是将位图的Byte数组转换为二进制,然后获取1和0的个数,最后相加获得特征码,有没有比这种方式更好的方法呢?若能提供帮助,小弟我感激不尽。
vbbyteGetCursorShape
解决方案 »
- for循环遍历listview??
- 求助 VB 数据删除问题
- 自己写的一个关于Excel列名转换的程序
- 高分求VB的NetBios编程实例与相关资料《--在线等,急急。。。。
- 请问如何得到一窗体下的文本、按钮的句柄并进行控制如click等。
- 紧急求助:如何利用MSFlexGrid控件分页显示数据?(在线等待)
- 我的Sql连接出错,是怎么回事呢?该怎么办呢?急急急急急急。。。。
- Word的类名到底是什么?wnd=FindWindow("OpusApp", 0)怎么得不到它的句柄?
- 这是我学vb一个月时的作品,大家帮助看看!
- 用vb创建大数组,可是系统越用越慢,如何用别的方法替换。
- vb中如何修改照片的尺寸
- VB 数据库链接
返回或设置一个值,该值指示在运行时当鼠标移动到对象的一个特定部分时,被显示的鼠标指针的类型。语法object.MousePointer [= value]MousePointer 属性语法包含下面部分:部分 描述
object 对象表达式,其值是“应用于”列表中的一个对象。
value 整数,按照设置值中的描述指定被显示的鼠标指针类型。
设置值value 的设置值为:常数 值 描述
vbDefault 0 (缺省值)形状由对象决定。
VbArrow 1 箭头。
VbCrosshair 2 十字线(crosshair 指针)。
VbIbeam 3 I 型
VbIconPointer 4 图标(矩形内的小矩形)。
VbSizePointer 5 尺寸线(指向东、南、西和北四方向的箭头)。
VbSizeNESW 6 右上-左下尺寸线(指向东北和西南方向的双箭头)。
VbSizeNS 7 垂-直尺寸线(指向南和北的双箭头)。
VbSizeNWSE 8 左上-右下尺寸线(指向东南和西北方向的双箭头)。
VbSizeWE 9 水-平尺寸线(指向东和西两个方向的双箭头)。
VbUpArrow 10 向上的箭头。
VbHourglass 11 沙漏(表示等待状态)。
VbNoDrop 12 不允许放下。
VbArrowHourglass 13 箭头和沙漏。
VbArrowQuestion 14 箭头和问号。
VbSizeAll 15 四向尺寸线。
VbCustom 99 通过 MouseIcon 属性所指定的自定义图标。
说明在鼠标指针越过窗体或对话框上的控件时,为了指出功能上的改变,可以使用该属性。沙漏标形状设置值 (11) 是很有用的,用来指示用户需要等待过程或操作的完成。注意 如果应用程序调用 DoEvents,那么 MousePointer 属性在经过 ActiveX 部件时可能暂时地改变。
Me.MousePointer = vbUpArrow '向上的箭头
Debug.Print Me.MousePointer
End Sub
准备一个DC,用DrawIcon API画上去。
至于怎么获得形状,就是你的事情了。
Dim Pt As POINTAPI
Call GetCursorPos(Pt)
Dim hWindow As Long
hWindow = WindowFromPoint(Pt.x, Pt.y)
Dim name As String * 256
Call GetWindowText(hWindow, name, 256)
Dim dwThreadID As Long
dwThreadID = GetWindowThreadProcessId(hWindow, 0)
Dim dwCurrentThreadID As Long
dwCurrentThreadID = GetCurrentThreadId
Dim hc As Long
If dwCurrentThreadID <> dwThreadID Then
If AttachThreadInput(dwCurrentThreadID, dwThreadID, True) Then
hc = GetCursor
Call AttachThreadInput(dwCurrentThreadID, dwThreadID, False)
End If
Else
hc = GetCursor
End If
Dim ii As ICONINFO
Call GetIconInfo(hc, ii)
Dim L As Long
L = 1024
Static bytes() As Byte
ReDim bytes(1 To L)
Dim length As Long
length = GetBitmapBits(ii.hbmColor, L, bytes(1))
Debug.Assert length < L
Dim arr(0 To 1) As Long
Dim i As Long
For i = LBound(arr) To UBound(arr)
arr(i) = 0
Next
For i = 1 To length
Dim j As Long
j = bytes(i)
Dim m As Long
For m = 1 To 8
Dim k As Long
k = j Mod 2
arr(k) = arr(k) + 1
j = j \ 2
Next
Next
Dim result As String
result = ""
For i = LBound(arr) To UBound(arr)
result = result & arr(i)
Next
Debug.Print Pt.x, Pt.y, result, Now, name
GetCursorShape = CLng(result)
End Function
这是我获取鼠标形状的代码,其中hc就是HCURSOR,这样获得的hc和GetCursorInfo获得的hc应该一样吧?我跟踪过,发现每次程序启动后这个hc都不一样。。