HandleNodeTV




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










( handlenodetv.html )- by Paolo Puglisi - Modifica del 17/12/2023