当前位置:编程学习 > VB >>

在TreeView中怎么判断点击的是节点的图片还是文字标签

如题.能否判断,没有事件是点击图片的.有的只是NodeClick这个事件.但这个分不开图片和文字.有没其它办法.或者获取图片的范围来判断?求大大现身.谢谢 --------------------编程问答--------------------

'运行前先添加个TreeView,Name为tv
Option Explicit
'位置常数
Private Const TVHT_ONITEMICON = &H2   '图标
Private Const TVHT_ONITEMLABEL = &H4  '标签
Private Const TVHT_ONITEMSTATEICON = &H40  '状态框
'还有其它位置常数,添加就行

'TV消息
Private Const TV_FIRST = &H1100
Private Const TVM_HITTEST = (TV_FIRST + 17)
'要用的结构
Private Type POINT
    x As Long
    y As Long
End Type
Private Type HTREEITEM
    hItem As Long
End Type
Private Type TVHITTESTINFO
    pt As POINT
    flags As Long
    hItem As HTREEITEM
End Type

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 Sub Form_Load()
tv.Nodes.Add , , , "第一项", 1, 1
tv.Nodes.Add , , , "第二项", 1, 1
End Sub

Private Sub tv_MouseUp(Button As Integer, Shift As Integer, x As Single, y As Single)
Dim tvhitInfo As TVHITTESTINFO
'坐标要变一下
tvhitInfo.pt.x = x / Screen.TwipsPerPixelX
tvhitInfo.pt.y = y / Screen.TwipsPerPixelY
'点击测试
SendMessage tv.hwnd, TVM_HITTEST, 0, tvhitInfo
Select Case tvhitInfo.flags
    Case TVHT_ONITEMICON
        MsgBox "击中图标"
    Case TVHT_ONITEMLABEL
        MsgBox "击中标签"
    Case TVHT_ONITEMSTATEICON
        MsgBox "击中状态框"
End Select
End Sub
--------------------编程问答-------------------- 上面的大哥.看完你的代码想请教几个问题啊.
本人菜鸟,对API不怎么熟悉.
1.位置常量为什么分别是&H2,&H4,&H40,消息TVM_HITTEST是&H1100+17 这些常量的意义从哪里能找到?
2.为什么定义TVHITTESTINFO结构的时候,要隔一层HTREEITEM结构来定义hItem,而不直接hTreeItem as long?
3.第三个参数的0代表的是什么?,应该怎么理解这API,我理解是发送树图的HITTEST类型消息.告诉树图我的坐标位置,获取点击的节点以及位置,就这例子,如果是HITTEST类型消息 ,那第4个参数的附加消息的变量必须要像你那样的定义一个结构吗?即第4个参数能不能为简单的为Flag as long --------------------编程问答-------------------- 上面的大哥.看完你的代码想请教几个问题啊.
本人菜鸟,对API不怎么熟悉.
1.位置常量为什么分别是&H2,&H4,&H40,消息TVM_HITTEST是&H1100+17 这些常量的意义从哪里能找到?
2.为什么定义TVHITTESTINFO结构的时候,要隔一层HTREEITEM结构来定义hItem,而不直接hTreeItem as long?
3.第三个参数的0代表的是什么?,应该怎么理解这API,我理解是发送树图的HITTEST类型消息.告诉树图我的坐标位置,获取点击的节点以及位置,就这例子,如果是HITTEST类型消息 ,那第4个参数的附加消息的变量必须要像你那样的定义一个结构吗?即第4个参数能不能为简单的为Flag as long --------------------编程问答-------------------- 上面的大哥.看完你的代码想请教几个问题啊.
本人菜鸟,对API不怎么熟悉.
1.位置常量为什么分别是&H2,&H4,&H40,消息TVM_HITTEST是&H1100+17 这些常量的意义从哪里能找到?
2.为什么定义TVHITTESTINFO结构的时候,要隔一层HTREEITEM结构来定义hItem,而不直接hTreeItem as long?
3.第三个参数的0代表的是什么?,应该怎么理解这API,我理解是发送树图的HITTEST类型消息.告诉树图我的坐标位置,获取点击的节点以及位置,就这例子,如果是HITTEST类型消息 ,那第4个参数的附加消息的变量必须要像你那样的定义一个结构吗?即第4个参数能不能为简单的为Flag as long --------------------编程问答-------------------- 个人认为,要判断控件上的是图片还是文字,可以采用:
1、获取该控件的句柄,获取的方法很多,具体问题具体分析。
2、通过句柄获取该控件上的文字,GetWindowText --------------------编程问答-------------------- 1、这是windows的规定,windows用各种常量标识windows的各种资源,常量的意义可从msdn上查到;

2、微软件声明了这是一个bug,设计这个API的程序员犯下的一个小错误,指定要这种类型,windows并没有HTREEITEM这个结构定义,但即然有了,也就只能沿用,改不了;

3、要完全理解这个API的各参数意义你可以msdn、百度、谷歌,很长,写不完
4、你为什么要定义为Long?上面的例子本质上传递的也是一个long(指向TVHITTESTINFO结构的指针,VB结构变量名代表变量首地址),但VB是不允许你把这个地址直接传给一个long型量(c中是可以的),所以要不想像上面一样定义也是可以的,但代价相当高 --------------------编程问答-------------------- 额.还是找不到这个&H1000.我自己再琢磨下.分给你了..不知道怎么给..
补充:VB ,  控件
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,