Browse DevX
Sign up for e-mail newsletters from DevX

Tip of the Day
Language: VB4/32,VB5,VB6
Expertise: Intermediate
Sep 18, 1999



Building the Right Environment to Support AI, Machine Learning and Deep Learning

GetTreeViewNodeHandle - The handle of any node in a TreeView

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
Comment and Contribute






(Maximum characters: 1200). You have 1200 characters left.



Thanks for your registration, follow us on our social networks to keep up-to-date