|
Beim TreeView-Steuerelement aus den Common-Controls haben Sie die Möglichkeit, über die Methode HitTest anhand gegebener Koordinaten zu prüfen, ob sich ein Knoten an dieser Stelle befindet. Das Gegenstück zur Ermittlung der tatsächlichen Koordinaten eines Knotens gibt es jedoch nicht. Den Common-Controls können Sie jedoch einiges mehr an Informationen entlocken, als die Visual Basic-OCX-Versionen (sowohl COMCTL32.OCX als auch MSCOMCTL.OCX) zu bieten haben. So erhalten Sie die Koordinaten des Rechtecks des aktuell selektierten Knotens über den Aufruf der API-Funktion SendMessage und der Nachricht TVM_GETITEMRECT. Das für diesen Aufruf notwendige Handle des Knotens (Item) erhalten Sie zuvor über einen weiteren Aufruf von SendMessage und der Nachricht TVM_GETNEXTITEM und der Spezifikation TVGN_CARET. Das so ermittelte Handle des Knotens wird im Element Left der benutzerdefinierten Variablen RECT an SendMessage übergeben - in RECT erhalten Sie anschließend die Koordinaten in Pixels zurück.
Die Funktion GetTvwNodeRect kapselt diese Aufrufe. Sie übergeben ihr die Referenz des betreffenden TreeView-Steuerelements und erhalten in den Parametern RetLeft, RetTop, RetRight und RetBottom die Koordinaten des aktuell selektierten Knotens zurück. Diese Rückgabe-Parameter müssen Sie vor dem Aufruf von GetTvwNodeRect deklarieren. Übergeben Sie zusätzlich im optionalen Parameter Pixels den Wert True, erhalten Sie die Koordinaten in Pixels, anderenfalls in der Maßeinheit Twips, in der auch die Mausereignisse des TreeView-Steuerelements die X- und Y-Koordinaten liefern.
Private Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type
Private Declare Function SendMessage Lib "user32" _
Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, _
wParam As Any, lParam As Any) As Long
Private Const TV_FIRST = &H1100
Private Const TVM_GETNEXTITEM = (TV_FIRST + 10)
Private Const TVM_GETITEMRECT = (TV_FIRST + 4)
Private Const TVGN_CARET = &H9
Public Function GetTvwNodeRect(Tvw As TreeView, _
RetLeft As Single, RetTop As Single, _
RetRight As Single, RetBottom As Single) As Boolean
Dim nRect As RECT
With Tvw
nRect.Left = SendMessage(.hwnd, TVM_GETNEXTITEM, _
ByVal TVGN_CARET, 0)
If nRect.Left Then
SendMessage .hwnd, TVM_GETITEMRECT, 1, nRect
GetTvwNodeRect = True
With nRect
RetLeft = .Left
RetTop = .Top
RetRight = .Right
RetBottom = .Bottom
End With
End If
End With
End Function
|
Die Funktion GetTvwNodeRect liefert Ihnen die Koordinaten des aktuell selektierten Knotens eines TreeView-Steuerelements

|

|