Duilib列表支持鼠标拖动框选和Ctrl+Shift多选

Duilib列表支持鼠标拖动框选和Ctrl+Shift多选

Duilib List拓展

Duilib_Ultimate里面已经支持了Ctrl按键实现了鼠标多选和Ctrl+A列表全选功能,现在开发很多朋友有提出了需要Shift多选和鼠标拖动框选,下面把实现的原理简单说一下。

Shift多选

目前List里面的接口已经支持对多选操作Api,Shift多选实现就很简单了,在SelectMultiItem函数里面,根据鼠标起始位置的序号和结束位置的序号,然后遍历把选择序号添加到选中数组即可。

鼠标拖动框选

  1. 在List增加三个接口:DragBegin,Draging,DragEnd,分别对应拖动开始、拖动、拖动结束;
  2. 在ListElement的DoEvent里面调用上面三个接口,LBUTTONDOWN调用DragBegin,MOUSEMOVE调用Draging,LBUTTONUP调用DragEnd;
  3. 在DragBegin里面要记录鼠标按下的位置,在Draging里面记录鼠标实时的位置,用于更新显示框选橡皮筋控件。在更新选择框的同时,计算选择列表项的起始和结束序号,都是连续的好计算,和上面Shift一样,更新列表项选择数组即可。在DragEnd里面取消选择框的显示,清空用于记录位置的各种变量;

效果如下

图片: 在这里插入图片描述

完整代码请联系Troy(QQ:656067418)

duilib开源项目交流圈(QQ群:261851826、261675375)