本帖最后由 cashiba 于 2017-6-7 18:57 编辑
记得有的编程工具里,树图采取的是即时加载子项的方法,也就是树图不是一次性全部加载,而是先加载主项目,如果某主项目有子项的话,其前面就显示"+"号,只有当点击这个加号的时候,才会读取子项数据并加载显示,这样比较节省资源。
教程里的示例好像都是一次性循环加载完全部项目的(如下)....
#include <GUIConstantsEx.au3>
#include <GuiImageList.au3>
#include <GuiTreeView.au3>
#include <WindowsConstants.au3>
Example()
Func Example()
Local $hItem, $hImage, $iImage, $idTreeView
Local $iStyle = BitOR($TVS_EDITLABELS, $TVS_HASBUTTONS, $TVS_HASLINES, $TVS_LINESATROOT, $TVS_DISABLEDRAGDROP, $TVS_SHOWSELALWAYS, $TVS_CHECKBOXES)
GUICreate("TreeView 添加项目", 400, 300)
$idTreeView = GUICtrlCreateTreeView(2, 2, 396, 268, $iStyle, $WS_EX_CLIENTEDGE)
GUISetState(@SW_SHOW)
$hImage = _GUIImageList_Create(16, 16, 5, 3)
_GUIImageList_AddIcon($hImage, "shell32.dll", 110)
_GUIImageList_AddIcon($hImage, "shell32.dll", 131)
_GUIImageList_AddIcon($hImage, "shell32.dll", 165)
_GUIImageList_AddIcon($hImage, "shell32.dll", 168)
_GUIImageList_AddIcon($hImage, "shell32.dll", 137)
_GUIImageList_AddIcon($hImage, "shell32.dll", 146)
_GUICtrlTreeView_SetNormalImageList($idTreeView, $hImage)
_GUICtrlTreeView_BeginUpdate($idTreeView)
For $x = 1 To Random(2, 10, 1)
$iImage = Random(0, 5, 1)
$hItem = _GUICtrlTreeView_Add($idTreeView, 0, StringFormat("[%02d] 新主项", $x), $iImage, $iImage)
For $y = 1 To Random(2, 10, 1)
$iImage = Random(0, 5, 1)
_GUICtrlTreeView_AddChild($idTreeView, $hItem, StringFormat("[%02d] 新子项", $y), $iImage, $iImage)
Next
Next
_GUICtrlTreeView_EndUpdate($idTreeView)
; 循环到用户退出.
Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE
GUIDelete()
EndFunc ;==>Example
谁有即时加载方法生成树图的例子呢?
比喻说,http://www.autoitx.com/thread-55348-1-1.html 这个里面的树图,采用即时加载子项的模式生成树图,该怎么改写呢。感觉需要注册消息,或用_GUICtrlTreeView_ClickItem?来完成 |