当前位置:编程学习 > VB >>

我想问下怎么获取treeview子节点句柄(急)

我想问下怎么获取treeview子节点句柄 抄来的,原作者是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
引用 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

……

不管是不是抄来的,这是正解! 这个我知道,用这样的方法我可以得到根节点,但是字节点获取不到在vb6.0当中。
引用 3 楼 hamilton0711 的回复:
这个我知道,用这样的方法我可以得到根节点,但是字节点获取不到在vb6.0当中。

有了根节点,那就好办,使用FindWindowEx 来查找
补充:VB ,  API
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,