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

解决方案 »

  1.   


    '运行前先添加个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 TypePrivate Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As LongPrivate Sub Form_Load()
    tv.Nodes.Add , , , "第一项", 1, 1
    tv.Nodes.Add , , , "第二项", 1, 1
    End SubPrivate 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
      

  2.   

    上面的大哥.看完你的代码想请教几个问题啊.
    本人菜鸟,对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
      

  3.   

    上面的大哥.看完你的代码想请教几个问题啊.
    本人菜鸟,对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
      

  4.   

    上面的大哥.看完你的代码想请教几个问题啊.
    本人菜鸟,对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
      

  5.   

    个人认为,要判断控件上的是图片还是文字,可以采用:
    1、获取该控件的句柄,获取的方法很多,具体问题具体分析。
    2、通过句柄获取该控件上的文字,GetWindowText
      

  6.   

    1、这是windows的规定,windows用各种常量标识windows的各种资源,常量的意义可从msdn上查到;2、微软件声明了这是一个bug,设计这个API的程序员犯下的一个小错误,指定要这种类型,windows并没有HTREEITEM这个结构定义,但即然有了,也就只能沿用,改不了;3、要完全理解这个API的各参数意义你可以msdn、百度、谷歌,很长,写不完
    4、你为什么要定义为Long?上面的例子本质上传递的也是一个long(指向TVHITTESTINFO结构的指针,VB结构变量名代表变量首地址),但VB是不允许你把这个地址直接传给一个long型量(c中是可以的),所以要不想像上面一样定义也是可以的,但代价相当高
      

  7.   

    额.还是找不到这个&H1000.我自己再琢磨下.分给你了..不知道怎么给..