我想问下怎么获取treeview子节点句柄(急)
时间:2011-11-09
来源:互联网
我想问下怎么获取treeview子节点句柄
作者: Hamilton0711 发布时间: 2011-11-09
抄来的,原作者是Francesco Balena
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal _
hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, _
lParam As Any) As Long
Private Const TVM_GETNEXTITEM = &H110A
Private Const TVGN_CARET = 9
' The handle of any node in a TreeView
'
' While VB developers reason in terms of Node objects, TreeView
' nodes are stored and referenced internally using 32-bit handles,
' and when you want to pass a reference to a Node in a API call you
' must pass the handle to it. The problem is that there is no easy
' way to get an arbitrary node's handle, and you can only get
' (or set) the handle of the selected node and a few others.
'
' However, we can get this information if we cheat a little,
' by temporarily selecting the node and then restoring the original
' selected node. This is very fast and the user won't notice any flickering.
Function GetTreeViewNodeHandle(ByVal TV As TreeView, Node As Node) As Long
Dim selNode As Node
' remember the node currently selected
Set selNode = TV.SelectedItem
' select the new node
Set TV.SelectedItem = Node
' send a message to retrieve the handle of current node
GetTreeViewNodeHandle = SendMessage(TV.hWnd, TVM_GETNEXTITEM, TVGN_CARET, _
ByVal 0&)
' restore the node that was selected
Set TV.SelectedItem = selNode
End Function
Francesco Balena
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal _
hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, _
lParam As Any) As Long
Private Const TVM_GETNEXTITEM = &H110A
Private Const TVGN_CARET = 9
' The handle of any node in a TreeView
'
' While VB developers reason in terms of Node objects, TreeView
' nodes are stored and referenced internally using 32-bit handles,
' and when you want to pass a reference to a Node in a API call you
' must pass the handle to it. The problem is that there is no easy
' way to get an arbitrary node's handle, and you can only get
' (or set) the handle of the selected node and a few others.
'
' However, we can get this information if we cheat a little,
' by temporarily selecting the node and then restoring the original
' selected node. This is very fast and the user won't notice any flickering.
Function GetTreeViewNodeHandle(ByVal TV As TreeView, Node As Node) As Long
Dim selNode As Node
' remember the node currently selected
Set selNode = TV.SelectedItem
' select the new node
Set TV.SelectedItem = Node
' send a message to retrieve the handle of current node
GetTreeViewNodeHandle = SendMessage(TV.hWnd, TVM_GETNEXTITEM, TVGN_CARET, _
ByVal 0&)
' restore the node that was selected
Set TV.SelectedItem = selNode
End Function
Francesco Balena
作者: patrickkong 发布时间: 2011-11-09
引用 1 楼 patrickkong 的回复:
抄来的,原作者是Francesco Balena
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal _
hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, _
lParam As Any) As Long
……
抄来的,原作者是Francesco Balena
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal _
hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, _
lParam As Any) As Long
……
不管是不是抄来的,这是正解!
作者: Veron_04 发布时间: 2011-11-09
这个我知道,用这样的方法我可以得到根节点,但是字节点获取不到在vb6.0当中。
作者: Hamilton0711 发布时间: 2011-11-09
引用 3 楼 hamilton0711 的回复:
这个我知道,用这样的方法我可以得到根节点,但是字节点获取不到在vb6.0当中。
这个我知道,用这样的方法我可以得到根节点,但是字节点获取不到在vb6.0当中。
有了根节点,那就好办,使用FindWindowEx 来查找
作者: Veron_04 发布时间: 2011-11-09
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28