'运行前先添加个TreeView,Name为tv Option Explicit '位置常数 Private Const TVHT_ONITEMICON = &H2 '图标 Private Const TVHT_ONITEMLABEL = &H4 '标签 Private Const TVHT_ONITEMSTATEICON = &H40 '状态框 '还有其它位置常数,添加就行'TV消息 Private Const TV_FIRST = &H1100 Private Const TVM_HITTEST = (TV_FIRST + 17) '要用的结构 Private Type POINT x As Long y As Long End Type Private Type HTREEITEM hItem As Long End Type Private Type TVHITTESTINFO pt As POINT flags As Long hItem As HTREEITEM End TypePrivate Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As LongPrivate Sub Form_Load() tv.Nodes.Add , , , "第一项", 1, 1 tv.Nodes.Add , , , "第二项", 1, 1 End SubPrivate Sub tv_MouseUp(Button As Integer, Shift As Integer, x As Single, y As Single) Dim tvhitInfo As TVHITTESTINFO '坐标要变一下 tvhitInfo.pt.x = x / Screen.TwipsPerPixelX tvhitInfo.pt.y = y / Screen.TwipsPerPixelY '点击测试 SendMessage tv.hwnd, TVM_HITTEST, 0, tvhitInfo Select Case tvhitInfo.flags Case TVHT_ONITEMICON MsgBox "击中图标" Case TVHT_ONITEMLABEL MsgBox "击中标签" Case TVHT_ONITEMSTATEICON MsgBox "击中状态框" End Select End Sub
上面的大哥.看完你的代码想请教几个问题啊. 本人菜鸟,对API不怎么熟悉. 1.位置常量为什么分别是&H2,&H4,&H40,消息TVM_HITTEST是&H1100+17 这些常量的意义从哪里能找到? 2.为什么定义TVHITTESTINFO结构的时候,要隔一层HTREEITEM结构来定义hItem,而不直接hTreeItem as long? 3.第三个参数的0代表的是什么?,应该怎么理解这API,我理解是发送树图的HITTEST类型消息.告诉树图我的坐标位置,获取点击的节点以及位置,就这例子,如果是HITTEST类型消息 ,那第4个参数的附加消息的变量必须要像你那样的定义一个结构吗?即第4个参数能不能为简单的为Flag as long
上面的大哥.看完你的代码想请教几个问题啊. 本人菜鸟,对API不怎么熟悉. 1.位置常量为什么分别是&H2,&H4,&H40,消息TVM_HITTEST是&H1100+17 这些常量的意义从哪里能找到? 2.为什么定义TVHITTESTINFO结构的时候,要隔一层HTREEITEM结构来定义hItem,而不直接hTreeItem as long? 3.第三个参数的0代表的是什么?,应该怎么理解这API,我理解是发送树图的HITTEST类型消息.告诉树图我的坐标位置,获取点击的节点以及位置,就这例子,如果是HITTEST类型消息 ,那第4个参数的附加消息的变量必须要像你那样的定义一个结构吗?即第4个参数能不能为简单的为Flag as long
上面的大哥.看完你的代码想请教几个问题啊. 本人菜鸟,对API不怎么熟悉. 1.位置常量为什么分别是&H2,&H4,&H40,消息TVM_HITTEST是&H1100+17 这些常量的意义从哪里能找到? 2.为什么定义TVHITTESTINFO结构的时候,要隔一层HTREEITEM结构来定义hItem,而不直接hTreeItem as long? 3.第三个参数的0代表的是什么?,应该怎么理解这API,我理解是发送树图的HITTEST类型消息.告诉树图我的坐标位置,获取点击的节点以及位置,就这例子,如果是HITTEST类型消息 ,那第4个参数的附加消息的变量必须要像你那样的定义一个结构吗?即第4个参数能不能为简单的为Flag as long
'运行前先添加个TreeView,Name为tv
Option Explicit
'位置常数
Private Const TVHT_ONITEMICON = &H2 '图标
Private Const TVHT_ONITEMLABEL = &H4 '标签
Private Const TVHT_ONITEMSTATEICON = &H40 '状态框
'还有其它位置常数,添加就行'TV消息
Private Const TV_FIRST = &H1100
Private Const TVM_HITTEST = (TV_FIRST + 17)
'要用的结构
Private Type POINT
x As Long
y As Long
End Type
Private Type HTREEITEM
hItem As Long
End Type
Private Type TVHITTESTINFO
pt As POINT
flags As Long
hItem As HTREEITEM
End TypePrivate Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As LongPrivate Sub Form_Load()
tv.Nodes.Add , , , "第一项", 1, 1
tv.Nodes.Add , , , "第二项", 1, 1
End SubPrivate Sub tv_MouseUp(Button As Integer, Shift As Integer, x As Single, y As Single)
Dim tvhitInfo As TVHITTESTINFO
'坐标要变一下
tvhitInfo.pt.x = x / Screen.TwipsPerPixelX
tvhitInfo.pt.y = y / Screen.TwipsPerPixelY
'点击测试
SendMessage tv.hwnd, TVM_HITTEST, 0, tvhitInfo
Select Case tvhitInfo.flags
Case TVHT_ONITEMICON
MsgBox "击中图标"
Case TVHT_ONITEMLABEL
MsgBox "击中标签"
Case TVHT_ONITEMSTATEICON
MsgBox "击中状态框"
End Select
End Sub
本人菜鸟,对API不怎么熟悉.
1.位置常量为什么分别是&H2,&H4,&H40,消息TVM_HITTEST是&H1100+17 这些常量的意义从哪里能找到?
2.为什么定义TVHITTESTINFO结构的时候,要隔一层HTREEITEM结构来定义hItem,而不直接hTreeItem as long?
3.第三个参数的0代表的是什么?,应该怎么理解这API,我理解是发送树图的HITTEST类型消息.告诉树图我的坐标位置,获取点击的节点以及位置,就这例子,如果是HITTEST类型消息 ,那第4个参数的附加消息的变量必须要像你那样的定义一个结构吗?即第4个参数能不能为简单的为Flag as long
本人菜鸟,对API不怎么熟悉.
1.位置常量为什么分别是&H2,&H4,&H40,消息TVM_HITTEST是&H1100+17 这些常量的意义从哪里能找到?
2.为什么定义TVHITTESTINFO结构的时候,要隔一层HTREEITEM结构来定义hItem,而不直接hTreeItem as long?
3.第三个参数的0代表的是什么?,应该怎么理解这API,我理解是发送树图的HITTEST类型消息.告诉树图我的坐标位置,获取点击的节点以及位置,就这例子,如果是HITTEST类型消息 ,那第4个参数的附加消息的变量必须要像你那样的定义一个结构吗?即第4个参数能不能为简单的为Flag as long
本人菜鸟,对API不怎么熟悉.
1.位置常量为什么分别是&H2,&H4,&H40,消息TVM_HITTEST是&H1100+17 这些常量的意义从哪里能找到?
2.为什么定义TVHITTESTINFO结构的时候,要隔一层HTREEITEM结构来定义hItem,而不直接hTreeItem as long?
3.第三个参数的0代表的是什么?,应该怎么理解这API,我理解是发送树图的HITTEST类型消息.告诉树图我的坐标位置,获取点击的节点以及位置,就这例子,如果是HITTEST类型消息 ,那第4个参数的附加消息的变量必须要像你那样的定义一个结构吗?即第4个参数能不能为简单的为Flag as long
1、获取该控件的句柄,获取的方法很多,具体问题具体分析。
2、通过句柄获取该控件上的文字,GetWindowText
4、你为什么要定义为Long?上面的例子本质上传递的也是一个long(指向TVHITTESTINFO结构的指针,VB结构变量名代表变量首地址),但VB是不允许你把这个地址直接传给一个long型量(c中是可以的),所以要不想像上面一样定义也是可以的,但代价相当高