首先打开树控件的属性对话框,添加单击事件如下图 *** 作,
,以上 *** 作会自动向工程中添加单击处理函数如下:
void CXXXXXX::OnNMClickTree1(NMHDR *pNMHDR, LRESULT *pResult)
{
// TODO: 在此添加控件通知处理程序代码
CPoint Pos
::GetCursorPos(&Pos) //获取鼠标点击的位置坐标
CPoint pt(Pos)
m_Treectrol.ScreenToClient(&pt) //有屏幕坐标转成 控件坐标(树控件的客户区坐标)
HTREEITEM hSelItem = m_Treectrol.HitTest(pt) //通过HitTest获取单击的子项
CRect rec
m_treeTaskRule.GetItemRect(hSelItem, &rec, TRUE)
if (hSelItem != 0 )//&& rec.PtInRect(pt) //判断是否单击到子项(注释掉的代码为是否点击到子项区域一般是其文字显示区域)
{
m_Treectrol.SelectItem(hSelItem) //选中点击项
// add your code
}
*pResult = 0
}
右键菜单: 选中子节点全被选中)... layui里面没有给到右键菜单,所以,我自己把源码改了一下: 找到layui文件夹里modules下的tree.js 用以上代码,替换以下代码 当i.which等于3,是右键事件,等于1是左键。 所以,左键响应的事件,还是可以在tree的属性设置的时候的click属性里写自己的左键事件,如 tree.render({ elem: '#test1' ,click: function(obj){ console.log(obj.data)//得到当前点击的节点数据 console.log(obj.state)//得到当前节点的展开状态:open、close、normal console.log(obj.elem)//得到当前节点元素 console.log(obj.data.children)//当前节点下是否有子节点 } })右键就在上面选中代码里if分支,i.swich=3的地方搞事情,菜单的话,就是自己写个菜单,然后根据鼠标点击位置显示和隐藏就好了。 二、父节点选中子节点全被选中 一个树形组件,比如到权限管理的时候,回显的时候,父节点被设置为选中,所有改节点的子节点都被设置为选中,但我们需要的可能是这 样的回显: 1、所以,要么,只获取所有已经拥有的权限的最末端的id,然后用 tree.setChecked('demoId', 1)//单个勾选 id 为 1 的节点 tree.setChecked('demoId', [2, 3])//批量勾选 id 为 2、3 的节点 去设置,这样,当子节点被一个选中,改节点的父节点也会被设置为选中,就可以得到需要的样子。 2、不然,就要把数据按照需要的样子做好,再重载实例 tree.reload('demoId', { //新的参数 data:newdata})数据怎么做呢?查看更多
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)