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)