[已解决]treeview获取分类名称的问题
本帖最后由 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
#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 不起作用呢???
还请楼上解释下,多谢! 回复 3# kxing
确定不起作用?点击按钮的时候,鼠标旁边难道没有出现文字? sorry,没注意用鼠标操作。
我直接用键盘空格去点了。
多谢楼上!
实现这点功能,代码量好像多了点。 回复 5# kxing
并不是因为要实现你的那点要求才加了那么多代码,而是因为使用GUIRegisterMsg注册消息回调函数之后,不论何时都可以及时的响应消息。
也许现在你还体会不到这样做的好处,等写多了代码就会晓得了。
页:
[1]