找回密码
 加入
搜索
查看: 870|回复: 7

[GUI管理] [已解决]关于TREEVIEW和LISTVIEW鼠标双击响应的问题,求大佬帮助!

[复制链接]
发表于 2022-7-9 13:03:57 | 显示全部楼层 |阅读模式
本帖最后由 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[Number($Index)][1], 0, 0, 0)
                           ;MsgBox(0, "",  _GUICtrlListView_GetItemText($ListView1, Number($Index), 0)&":   TREEVIEW ID="&$hItemArray[$numx][1])
                           Local $pcmsg = StringSplit($hItemArray[$numx][1], ";")
                           OpenServer($pcmsg)
                 EndSwitch
   EndSwitch
   Return $GUI_RUNDEFMSG
EndFunc

发表于 2022-7-9 13:27:29 | 显示全部楼层
$hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))  和 $hWndFrom = HWnd(DllStructGetData($tNMHDR, 2))  是一样的。
$iCode = DllStructGetData($tNMHDR, "Code") 这个是操作代码
$iCode = DllStructGetData($tNMHDR, 3) 这个是控件ID,你确定对应双击?

发帖前整理出一份可执行且可重现问题的最简代码,是尽快解决问题的关键。
 楼主| 发表于 2022-7-9 14:13:39 | 显示全部楼层
afan 发表于 2022-7-9 13:27
$hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))  和 $hWndFrom = HWnd(DllStructGetData($tNMHD ...

是的,都是论坛上找的帖子照做的,不过已解决了,也是论坛里面找的帖子
https://www.autoitx.com/forum.ph ... ;highlight=treeview
2楼回复贴里面
Local $hWndTreeView = $TreeView
If Not IsHWnd($TreeView) Then $hWndTreeView = GUICtrlGetHandle($TreeView)
增加了这两句,就可以LIST和TREE都响应双击了
 楼主| 发表于 2022-7-9 14:16:04 | 显示全部楼层
afan 发表于 2022-7-9 13:27
$hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))  和 $hWndFrom = HWnd(DllStructGetData($tNMHD ...

https://www.autoitx.com/forum.ph ... view%2B%CB%AB%BB%F7

用参数2 3是这个帖子里面写的,我都不太明白,都是参照人家的写了,然后测试,哈哈哈。
发表于 2022-7-9 17:00:44 | 显示全部楼层
你创建的结构是 $tNMHDR = DllStructCreate($tagNMHDR, $lParam)
你参照的结构是 $tagNMHDR = DllStructCreate("int;int;int", $LParam)
构造不一样,你直接引用部分,哪能一样。
 楼主| 发表于 2022-7-10 00:31:25 | 显示全部楼层
afan 发表于 2022-7-9 17:00
你创建的结构是 $tNMHDR = DllStructCreate($tagNMHDR, $lParam)
你参照的结构是 $tagNMHDR = DllStructCr ...

没用这句,我参考的,但我没用,只是把那两句,参数改成 2 3,就能响应TREE,但LIST就没反应了,反之LIST能响应双击,TREE没反应了,但是今天参考了另一个帖子,增加了一句 ,把TREE的句柄给另一个变量,然后CASE 这个变量,TREE 和 LIST都能响应双击了,其他都没变,就变了这一点。
发表于 2022-7-10 00:56:05 | 显示全部楼层
zdphj 发表于 2022-7-10 00:31
没用这句,我参考的,但我没用,只是把那两句,参数改成 2 3,就能响应TREE,但LIST就没反应了,反之LIST ...

我只是指出你提出的错误,听不听是你的事
 楼主| 发表于 2022-7-10 09:43:25 | 显示全部楼层
afan 发表于 2022-7-10 00:56
我只是指出你提出的错误,听不听是你的事

感谢大佬,这个东西我只是初学者,了解还不深入,这个消息响应我也看不太懂,所以只有照论坛帖子人家的内容,自己拿去不停的修改,不停的试。
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-12-23 07:09 , Processed in 0.084732 second(s), 19 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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