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 TV_FIRST = &H1100 Private Const TVM_GETNEXTITEM = (TV_FIRST + 10) Private Const TVM_SELECTITEM = (TV_FIRST + 11) Private Const TVGN_CARET = 9 Private Const TVGN_FIRSTVISIBLE = &H5 ' Return the first visible node of a TreeView Function GetTreeViewFirstVisibleNode(ByVal TV As TreeView) As Node Dim hItem As Long Dim selNode As Node ' remember the node currently selected Set selNode = TV.SelectedItem ' get the handle of the first visible Node hItem = SendMessage(TV.hWnd, TVM_GETNEXTITEM, TVGN_FIRSTVISIBLE, ByVal 0&) ' make it the selected Node SendMessage TV.hWnd, TVM_SELECTITEM, TVGN_CARET, ByVal hItem ' return the result as a Node object Set GetTreeViewFirstVisibleNode = TV.SelectedItem ' restore node that was selected Set TV.SelectedItem = selNode End Function |