Duilib列表支持鼠标拖动框选和Ctrl+Shift多选
Duilib List拓展
Duilib_Ultimate里面已经支持了Ctrl按键实现了鼠标多选和Ctrl+A列表全选功能,现在开发很多朋友有提出了需要Shift多选和鼠标拖动框选,下面把实现的原理简单说一下。
Shift多选
目前List里面的接口已经支持对多选操作Api,Shift多选实现就很简单了,在SelectMultiItem函数里面,根据鼠标起始位置的序号和结束位置的序号,然后遍历把选择序号添加到选中数组即可。
鼠标拖动框选
- 在List增加三个接口:DragBegin,Draging,DragEnd,分别对应拖动开始、拖动、拖动结束;
- 在ListElement的DoEvent里面调用上面三个接口,LBUTTONDOWN调用DragBegin,MOUSEMOVE调用Draging,LBUTTONUP调用DragEnd;
- 在DragBegin里面要记录鼠标按下的位置,在Draging里面记录鼠标实时的位置,用于更新显示框选橡皮筋控件。在更新选择框的同时,计算选择列表项的起始和结束序号,都是连续的好计算,和上面Shift一样,更新列表项选择数组即可。在DragEnd里面取消选择框的显示,清空用于记录位置的各种变量;
效果如下
图片:
完整代码请联系Troy(QQ:656067418)
duilib开源项目交流圈(QQ群:261851826、261675375)