找回密码
 加入
搜索
查看: 6188|回复: 5

[GUI管理] [已解决]treeview获取分类名称的问题

  [复制链接]
发表于 2011-3-25 22:49:03 | 显示全部楼层 |阅读模式
本帖最后由 kxing 于 2011-3-26 13:05 编辑

当我光标停留在中国某城市的项目时点获取按钮输出中国。
光标停留在美国某城市的项目时点获取按钮就输出美国。
也就是希望获取该分类的名称,求高手帮忙解决!多谢!
#Include <GuiTreeView.au3>

$hForm=guicreate("treeview",200,100)
$hTree=guictrlcreatetreeview(0,0,150,100)
$hChina=guictrlcreatetreeviewitem("中国",$hTree)
guictrlcreatetreeviewitem("北京",$hChina)
guictrlcreatetreeviewitem("广东",$hChina)
guictrlcreatetreeviewitem("四川",$hChina)
$hUSA=guictrlcreatetreeviewitem("美国",$hTree)
guictrlcreatetreeviewitem("纽约",$hUSA)
guictrlcreatetreeviewitem("华盛顿",$hUSA)
guictrlcreatetreeviewitem("洛杉矶",$hUSA)
$hBut=guictrlcreatebutton("获取",155,70,40,20)
guisetstate()

while 1
switch guigetmsg()
case -3
exit
case $hBut
$class=_GUICtrlTreeView_GetText($hTree)
msgbox(0,'ok','所属国家:'&$class)
endswitch
wend
发表于 2011-3-25 23:35:25 | 显示全部楼层
#include <GuiConstantsEx.au3>
#include <GuiTreeView.au3>
#include <WindowsConstants.au3>

$hForm=guicreate("treeview",200,200)
$hTree=guictrlcreatetreeview(0,0,150,200)
$hChina=guictrlcreatetreeviewitem("中国",$hTree)
guictrlcreatetreeviewitem("北京",$hChina)
guictrlcreatetreeviewitem("广东",$hChina)
guictrlcreatetreeviewitem("四川",$hChina)
$hUSA=guictrlcreatetreeviewitem("美国",$hTree)
guictrlcreatetreeviewitem("纽约",$hUSA)
guictrlcreatetreeviewitem("华盛顿",$hUSA)
guictrlcreatetreeviewitem("洛杉矶",$hUSA)
$hBut=guictrlcreatebutton("获取",155,70,40,20)
guisetstate()
GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")
GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
GUIRegisterMsg($WM_SYSCOMMAND, "WM_SYSCOMMAND")

while 1
        Sleep(60000)
wend

Func WM_COMMAND($hWnd, $iMsg, $iwParam, $ilParam)
        Dim $iIDFrom = BitAND($iwParam, 0xFFFF)
        Dim $iCode = BitShift($iwParam, 16)
        Switch $iwParam
                Case $hBut
                        Switch $iCode
                                Case 0
                                        _ShowMsg($hTree)
                        EndSwitch
        EndSwitch
EndFunc

Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
    #forceref $hWnd, $iMsg, $iwParam
    Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR

    $tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
    $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
    $iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
    $iCode = DllStructGetData($tNMHDR, "Code")
    Switch $hWndFrom
        Case GUICtrlGetHandle($hTree)
            Switch $iCode
                                Case $NM_CLICK
                                        ;单击消息
                        EndSwitch
        EndSwitch
EndFunc

Func WM_SYSCOMMAND($hWnd, $Msg, $wParam, $lParam)
        $nID = BitAND($wParam, 0x0000FFFF)
        Switch $nID
                Case 61536
                        If $hWnd == $hForm Then
                                Exit
                        EndIf
        EndSwitch
EndFunc   ;==>WM_SYSCOMMAND

Func _ShowMsg($hWnd)
        Dim $hItem, $hParent
        $hItem = _GUICtrlTreeView_GetSelection($hWnd)
        $hParent = _GUICtrlTreeView_GetParentHandle($hWnd, $hItem)
        If $hParent == GUICtrlGetHandle($hChina) Then
                ToolTip("中国")
        ElseIf $hParent == GUICtrlGetHandle($hUSA) Then
                ToolTip("美国")
        Else
                ToolTip("")
        EndIf
EndFunc
 楼主| 发表于 2011-3-26 00:26:17 | 显示全部楼层
不起作用呢???
还请楼上解释下,多谢!
发表于 2011-3-26 01:40:21 | 显示全部楼层
回复 3# kxing

确定不起作用?点击按钮的时候,鼠标旁边难道没有出现文字?
 楼主| 发表于 2011-3-26 13:05:26 | 显示全部楼层
sorry,没注意用鼠标操作。
我直接用键盘空格去点了。
多谢楼上!
实现这点功能,代码量好像多了点。
发表于 2011-3-26 23:04:36 | 显示全部楼层
回复 5# kxing
并不是因为要实现你的那点要求才加了那么多代码,而是因为使用GUIRegisterMsg注册消息回调函数之后,不论何时都可以及时的响应消息。
也许现在你还体会不到这样做的好处,等写多了代码就会晓得了。
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-6-11 06:50 , Processed in 0.090537 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表