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 Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal _
hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, _
lParam As Any) As Long
' 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