您的位置:首页 > 编程语言 > VB

如何正确使用TreeView的HitTest方法?

2011-04-29 10:36 696 查看
Q:如何正确使用TreeView的HitTest方法?

A:在TreeView控件
中有一个非常有用的方法HitTest,其功能
是返回指定坐标的节点对象
。其语法如下:

object.HitTest(x As Single, y As Single)

其中x和y代表坐标点,但必须要注意的是这里的x和y表示的是单位缇。任何数值
必须转换为相应的缇才能正确得到HitTest的返回结果


参考以下示例。本例中利用MouseMove事件和HitTest方法,返回当前鼠标所指向的节点的显示文本
。代码如下:

Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function GetDeviceCaps Lib "gdi32" (ByVal hdc As Long, ByVal nindex As Long) As Long
Private PixX2TwipX As Double '像素转换成缇
Private PixX2TwipY As Double
Private Const LOGPIXELSX = 88
Private Const LOGPIXELSY = 90
Private Sub TreeView1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal x As stdole.OLE_XPOS_PIXELS, ByVal y As stdole.OLE_YPOS_PIXELS)
If Not TreeView1.HitTest(x * PixX2TwipX, y * PixX2TwipY) Is Nothing Then Label1.Caption = TreeView1.HitTest(x * PixX2TwipX, y * PixX2TwipY).Text
End Sub
''初始化窗体
Private Sub UserForm_Initialize()
Dim Dep1 As Node
Dim Dep2 As Node
Dim i As Long
Dim Arr
On Error Resume Next
Arr = Range("A2:C" & Range("A65536").End(xlUp).Row)
With TreeView1
For i = 1 To UBound(Arr)
Set Dep1 = .Nodes(Arr(i, 2))
If Err.Number <> 0 Then
Err.Clear
Set Dep1 = .Nodes.Add(Key:=Arr(i, 2), Text:=Arr(i, 2))
End If
Set Dep2 = .Nodes(Arr(i, 3))
If Err.Number <> 0 Then
Err.Clear
Set Dep2 = .Nodes.Add(relative:=Dep1, relationship:=tvwChild, Key:=Arr(i, 3), Text:=Arr(i, 3))
End If
.Nodes.Add relative:=Dep2, relationship:=tvwChild, Key:=i & Arr(i, 1), Text:=Arr(i, 1)
Next
Set Dep1 = .Nodes("人事")
End With
PixX2TwipX = Application.InchesToPoints(1) * 20 / GetDeviceCaps(GetDC(0), LOGPIXELSX)
PixX2TwipY = Application.InchesToPoints(1) * 20 / GetDeviceCaps(GetDC(0), LOGPIXELSY)
End Sub


[Excel VBA] 如何正确使用TreeView的HitTest方法? http://www.exceltip.net/thread-20089-1-1-11314.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息