[已解决]关于TREEVIEW和LISTVIEW鼠标双击响应的问题,求大佬帮助!
本帖最后由 zdphj 于 2022-7-9 14:14 编辑新手被困扰2天的问题,我界面是左边TREEVIEW,右边LISTVIEW,如果代码如下,鼠标双击LISTVIEW可以响应事件,但TREEVIEW不响应;但是如代码里面,启用屏蔽的参数为 2 3那2句,屏蔽掉上面对应的2句,就可以响应TREEVIEW的鼠标双击事件,但LISTVIEW的双击又不响应了,不知道问题出在哪里,请各位大佬帮忙看看!
Func WM_NOTIFY($hWnd, $iMsg, $wParam, $lParam)
#forceref $hWnd, $iMsg, $wParam
Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $tInfo
$tNMHDR = DllStructCreate($tagNMHDR, $lParam)
$hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom")) -----------------------
$iCode = DllStructGetData($tNMHDR, "Code") ----------------------启用这两句 可以响应 $ListView1 的双击,但是不响应 $g_hTreeView
;$hWndFrom = HWnd(DllStructGetData($tNMHDR, 2)) ------------------
;$iCode = DllStructGetData($tNMHDR, 3) ------------------启用这两句,可以响应 $g_hTreeView 的双击,但是不响应 $ListView1
Switch $hWndFrom
Case $g_hTreeView
Switch $iCode
Case $NM_DBLCLK ; 双击
$Index = _GUICtrlTreeView_GetSelection($g_hTreeView)
If Not $Index Then Return; 这里用以判断是否选定了TreeViewItem
MsgBox(0,0,"双击了" & $Index)
EndSwitch
Case $ListView1
Switch $iCode
Case $NM_DBLCLK ; 左键双击
$tInfo = DllStructCreate($tagNMITEMACTIVATE, $lParam)
$Index = DllStructGetData($tInfo, "Index") ;_GUICtrlListView_GetSelectedIndices($ListView1)
If $Index = -1 Then Return; 这里用以判断是否选定了ListViewItem
Local $numx = _ArrayBinarySearch($hItemArray, $LItemx, 0, 0, 0)
;MsgBox(0, "",_GUICtrlListView_GetItemText($ListView1, Number($Index), 0)&": TREEVIEW ID="&$hItemArray[$numx])
Local $pcmsg = StringSplit($hItemArray[$numx], ";")
OpenServer($pcmsg)
EndSwitch
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc
$hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))和 $hWndFrom = HWnd(DllStructGetData($tNMHDR, 2))是一样的。
$iCode = DllStructGetData($tNMHDR, "Code") 这个是操作代码
$iCode = DllStructGetData($tNMHDR, 3) 这个是控件ID,你确定对应双击?
发帖前整理出一份可执行且可重现问题的最简代码,是尽快解决问题的关键。 afan 发表于 2022-7-9 13:27
$hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))和 $hWndFrom = HWnd(DllStructGetData($tNMHD ...
是的,都是论坛上找的帖子照做的,不过已解决了,也是论坛里面找的帖子
https://www.autoitx.com/forum.php?mod=viewthread&tid=71858&highlight=treeview
2楼回复贴里面
Local $hWndTreeView = $TreeView
If Not IsHWnd($TreeView) Then $hWndTreeView = GUICtrlGetHandle($TreeView)
增加了这两句,就可以LIST和TREE都响应双击了 afan 发表于 2022-7-9 13:27
$hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))和 $hWndFrom = HWnd(DllStructGetData($tNMHD ...
https://www.autoitx.com/forum.php?mod=viewthread&tid=45113&highlight=treeview%2B%CB%AB%BB%F7
用参数2 3是这个帖子里面写的,我都不太明白,都是参照人家的写了,然后测试,哈哈哈。 你创建的结构是 $tNMHDR = DllStructCreate($tagNMHDR, $lParam)
你参照的结构是 $tagNMHDR = DllStructCreate("int;int;int", $LParam)
构造不一样,你直接引用部分,哪能一样。
afan 发表于 2022-7-9 17:00
你创建的结构是 $tNMHDR = DllStructCreate($tagNMHDR, $lParam)
你参照的结构是 $tagNMHDR = DllStructCr ...
没用这句,我参考的,但我没用,只是把那两句,参数改成 2 3,就能响应TREE,但LIST就没反应了,反之LIST能响应双击,TREE没反应了,但是今天参考了另一个帖子,增加了一句 ,把TREE的句柄给另一个变量,然后CASE 这个变量,TREE 和 LIST都能响应双击了,其他都没变,就变了这一点。 zdphj 发表于 2022-7-10 00:31
没用这句,我参考的,但我没用,只是把那两句,参数改成 2 3,就能响应TREE,但LIST就没反应了,反之LIST ...
我只是指出你提出的错误,听不听是你的事 afan 发表于 2022-7-10 00:56
我只是指出你提出的错误,听不听是你的事
感谢大佬,这个东西我只是初学者,了解还不深入,这个消息响应我也看不太懂,所以只有照论坛帖子人家的内容,自己拿去不停的修改,不停的试。
页:
[1]