Option Explicit
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 Type RECT Left As Long Top As Long Right As Long Bottom As Long End Type Private Const TV_FIRST = &H1100 Private Const TVM_GETITEMRECT = (TV_FIRST + 4) ' Return the binding rectangle for the TreeView item whose ' handle is passed in the second argument. If the 3rd argument ' is True it returns the bounding rectangle for the text portion ' of the node, otherwise it returns the bounding rectangle for ' the entire row. ' ' The result rectangle isn't clipped to the TreeView's visibile portion ' Coordinates are relative to the TreeView's client area ' ' You can use this routine to determine the node under the mouse ' cursor, or to precisely move a textbox or a combobox over a given node. Function GetTreeViewNodeRect(ByVal TV As TreeView, ByVal hItem As Long, _ Optional IncludeTextOnly As Boolean) As RECT Dim lpRect As RECT ' the function expects in input the handle of the item ' at the beginning of the RECT structure lpRect.Left = hItem If SendMessage(TV.hWnd, TVM_GETITEMRECT, IncludeTextOnly, lpRect) Then ' a non-zero value means that the item is visible GetTreeViewNodeRect = lpRect End If End Function |