# win.ui.ctrl.treeview 库模块帮助文档

<details>  <summary>说明</summary>  <p>

treeview 控件部分初始化属性：

| 属性面板名称| 属性字段名 | 可选值 | 默认值
| ----------- | ----------- | ----------- | ----------- |
| 模式      | checkbox       | true,false | false|
| 显示复选框  | checkbox | true,false| true |
| 选中整行  | fullRow | true,false| false |
| 保持选定（取反） | hideSel | true,false | true  |
| 启用连线  | hasLines | true,false| true |
| 启用根连接  | linesAtRoot | true,false| true |
| 启用按钮  | hasButtons | true,false| true |
| 隐藏提示  | noToolTips | true,false| false |
| 信息提示  | infoTip | true,false| false |
| 展开单节点  | singleExpand | true,false| true |
| 垂直滚动条  | vscroll | true,false| false |
| 水平滚动条  | hscroll | true,false| false |
| 允许编辑  | editable | true,false| false |

更多属性请参考 treeview 控件源码。
大多数初始化属性需要写在初始化参数表里才有效，例如：

```aardio
winform.add(
treeview={cls="treeview";fullRow=1;hideSel=false;left=235;top=207;right=400;bottom=337;z=1}
)
```

</p></details>

[treeview 入门示例](https://www.aardio.com/zh-cn/docs/examples/Windows/TreeView/treeview.html)

## win.ui.ctrl 成员列表 <a id="win.ui.ctrl" href="#win.ui.ctrl">&#x23;</a>

### win.ui.ctrl.treeview() <a id="win.ui.ctrl.treeview" href="#win.ui.ctrl.treeview">&#x23;</a>
树形视图控件  

[返回对象:treeviewObject](#treeviewObject)

## treeviewObject 成员列表 <a id="treeviewObject" href="#treeviewObject">&#x23;</a>

### treeviewObject._parentForm <a id="treeviewObject._parentForm" href="#treeviewObject._parentForm">&#x23;</a>
返回创建控件的容器窗口（win.form对象），所有窗口控件都拥有此只读属性。  
对于使用窗体设计器创建的窗口，也就是返回设计时窗体容器。  

即使子窗口移除子窗口样式、更改父子关系，或以 orphanWindow显示，  
控件的 _parentForm 始终都不会改变  

[返回对象:winform](https://www.aardio.com/zh-cn/docs/library-reference/win/ui/_.html#winform)

### treeviewObject.addCtrl <a id="treeviewObject.addCtrl" href="#treeviewObject.addCtrl">&#x23;</a>

```aardio
treeviewObject.addCtrl(  
	button={ cls="button";text="button";left=33;top=32;right=126;bottom=81;autoResize=false }    
)
```

### treeviewObject.adjust <a id="treeviewObject.adjust" href="#treeviewObject.adjust">&#x23;</a>

```aardio
treeviewObject.adjust = function( cx,cy,wParam ) {	   
	/*窗口缩放时会自动触发此函数。  
cx 参数为窗口宽度,cy 参数为窗口高度,  
wParam 参数请参考 _WM_SIZE 消息参数说明,一般不用管。  

所有 win.form 创建的窗体和控件都支持此事件,  
重复赋值只会追加而不会覆盖此事件。  
一般不建议添加一个 wndproc 仅仅是为了处理  _WM_SIZE 消息，  
定义 adjust 事件是更好的选择。  

可主动调用此事件,省略参数时 cx,cy 参数默认设为窗口大小*/    
};
```

### treeviewObject.bottom <a id="treeviewObject.bottom" href="#treeviewObject.bottom">&#x23;</a>
底部坐标

### treeviewObject.capture <a id="treeviewObject.capture" href="#treeviewObject.capture">&#x23;</a>
是否捕获全局鼠标消息

### treeviewObject.checkAll(节点句柄,是否选中) <a id="treeviewObject.checkAll" href="#treeviewObject.checkAll">&#x23;</a>
勾选或取消勾选所有下级子节点  
并且更新所有上级父节点的勾选状态为：是否有任意的子节点是勾选状态  
参数@1如果不指定则表示根节点(_TVI_ROOT)  
参数@2不指定则默认赋值为true

### treeviewObject.className <a id="treeviewObject.className" href="#treeviewObject.className">&#x23;</a>
运行时类名

### treeviewObject.clear <a id="treeviewObject.clear" href="#treeviewObject.clear">&#x23;</a>
清空节点

### treeviewObject.clear() <a id="treeviewObject.clear" href="#treeviewObject.clear">&#x23;</a>
清空所有节点

### treeviewObject.clear(hItem) <a id="treeviewObject.clear" href="#treeviewObject.clear">&#x23;</a>
清空参数指定节点的所有子节点,  
@hItem 参数指定节点句柄

### treeviewObject.clientHeight <a id="treeviewObject.clientHeight" href="#treeviewObject.clientHeight">&#x23;</a>
控件窗口客户区宽度，只读属性。

### treeviewObject.clientWidth <a id="treeviewObject.clientWidth" href="#treeviewObject.clientWidth">&#x23;</a>
控件窗口客户区宽度，只读属性。

### treeviewObject.close() <a id="treeviewObject.close" href="#treeviewObject.close">&#x23;</a>
关闭控件窗口

### treeviewObject.cls <a id="treeviewObject.cls" href="#treeviewObject.cls">&#x23;</a>
设计时类名

### treeviewObject.collapse(hItem) <a id="treeviewObject.collapse" href="#treeviewObject.collapse">&#x23;</a>
折叠项  
参数为节点句柄,省略则取当前选中项

### treeviewObject.collapseReset(hItem) <a id="treeviewObject.collapseReset" href="#treeviewObject.collapseReset">&#x23;</a>
折叠并删除子项  
参数为节点句柄,省略则取当前选中项

### treeviewObject.count <a id="treeviewObject.count" href="#treeviewObject.count">&#x23;</a>
获取项目总数

### treeviewObject.delItem(hItem节点句柄) <a id="treeviewObject.delItem" href="#treeviewObject.delItem">&#x23;</a>
删除节点  
参数:节点句柄

### treeviewObject.disabled <a id="treeviewObject.disabled" href="#treeviewObject.disabled">&#x23;</a>
是否禁用

### treeviewObject.each(父节点句柄) <a id="treeviewObject.each" href="#treeviewObject.each">&#x23;</a>

```aardio
for hChild in treeviewObject.each(){
	/*遍历父节点句柄的下级子级点  
不包含子节点的子节点*/
}
```

### treeviewObject.editLabel(hItem) <a id="treeviewObject.editLabel" href="#treeviewObject.editLabel">&#x23;</a>
开始编辑项,参数为节点句柄

### treeviewObject.endEdit() <a id="treeviewObject.endEdit" href="#treeviewObject.endEdit">&#x23;</a>
结束编辑并

### treeviewObject.endEdit(true) <a id="treeviewObject.endEdit" href="#treeviewObject.endEdit">&#x23;</a>
结束编辑并取消

### treeviewObject.ensureVisible(hItem) <a id="treeviewObject.ensureVisible" href="#treeviewObject.ensureVisible">&#x23;</a>
确保指定项目是可见的,通过展开父项目或滚动树型控件窗,  
参数为节点句柄

### treeviewObject.enum(回调函数,节点句柄) <a id="treeviewObject.enum" href="#treeviewObject.enum">&#x23;</a>

```aardio
treeviewObject.enum(  
	function(hItem,parent){  
		/*枚举所有下级子节点,  
hItem为当前节点,parent为当前节点的父节点  
返回false停止枚举*/  
	}  
)
```

### treeviewObject.enumParent(回调函数,节点句柄) <a id="treeviewObject.enumParent" href="#treeviewObject.enumParent">&#x23;</a>

```aardio
treeviewObject.enumParent(  
	function(parent,child){  
		/*枚举所有上级父节点,  
parent为当前父节点,child为该节点的子节点  
child是上一次枚举到的父节点或者自身  
返回false停止枚举*/  
	}  
)
```

### treeviewObject.expand(hItem) <a id="treeviewObject.expand" href="#treeviewObject.expand">&#x23;</a>
展开项  
参数为节点句柄,省略则取当前选中项

### treeviewObject.expandAll(hItem) <a id="treeviewObject.expandAll" href="#treeviewObject.expandAll">&#x23;</a>
展开指定项,并展开指定项的所有下级子级点  
包含子级点的所有下级子节点都会被展开

### treeviewObject.expandPartial(hItem) <a id="treeviewObject.expandPartial" href="#treeviewObject.expandPartial">&#x23;</a>
部分展开  
参数为节点句柄,省略则取当前选中项

### treeviewObject.expandTo(hItem) <a id="treeviewObject.expandTo" href="#treeviewObject.expandTo">&#x23;</a>
展开项以及其所有上级父节点  
参数为节点句柄,省略则取当前选中项

### treeviewObject.find(父节点,"子项标题",...) <a id="treeviewObject.find" href="#treeviewObject.find">&#x23;</a>
查找子项,展开上级父节点,  
可以用多个文本参数多级向下查找子项,  
父节点参数可省略,参数也可以是一个字符串数组

### treeviewObject.findPath(父节点,"路径\子项") <a id="treeviewObject.findPath" href="#treeviewObject.findPath">&#x23;</a>
按路径查找子项,展开上级父节点  
父节点参数可省略不写,默认为根节点,

### treeviewObject.getChecked(hItem节点句柄) <a id="treeviewObject.getChecked" href="#treeviewObject.getChecked">&#x23;</a>
返回指定项的复选框是否勾选

### treeviewObject.getChildItem(hItem节点句柄) <a id="treeviewObject.getChildItem" href="#treeviewObject.getChildItem">&#x23;</a>
返回子节点  
参数:节点句柄

### treeviewObject.getChildren(hItem) <a id="treeviewObject.getChildren" href="#treeviewObject.getChildren">&#x23;</a>
返回包含节点所有子节点句柄的数组,  
@hItem 参数指定节点句柄

### treeviewObject.getClientRect() <a id="treeviewObject.getClientRect" href="#treeviewObject.getClientRect">&#x23;</a>
控件客户区块位置(::RECT结构体)  

[返回对象:rectObject](https://www.aardio.com/zh-cn/docs/library-reference/global/_.html#rectObject)

### treeviewObject.getEditControl() <a id="treeviewObject.getEditControl" href="#treeviewObject.getEditControl">&#x23;</a>
开始编辑时返回编辑控件,  
此控件在完成编辑后会自动销毁,不必手动销毁  
取消发送_WM_CANCELMODE消息即可  

[返回对象:editObject](https://www.aardio.com/zh-cn/docs/library-reference/win/ui/ctrl/edit.html#editObject)

### treeviewObject.getEditHwnd() <a id="treeviewObject.getEditHwnd" href="#treeviewObject.getEditHwnd">&#x23;</a>
返回编辑文本框句柄;

### treeviewObject.getFirst() <a id="treeviewObject.getFirst" href="#treeviewObject.getFirst">&#x23;</a>
返回树视图中的第一个节点  
也即_TVI_ROOT的第一个子节点

### treeviewObject.getFirstVisible() <a id="treeviewObject.getFirstVisible" href="#treeviewObject.getFirstVisible">&#x23;</a>
返回第一个可见节点  
参数:节点句柄

### treeviewObject.getFont() <a id="treeviewObject.getFont" href="#treeviewObject.getFont">&#x23;</a>
控件字体(::LOGFONT结构体)  

[返回对象:logfontObject](#logfontObject)

### treeviewObject.getImageList( _TVSIL ) <a id="treeviewObject.getImageList" href="#treeviewObject.getImageList">&#x23;</a>
获取图像列表,  
可选使用 _LVSIL_ 前缀常量指定类型

### treeviewObject.getItem() <a id="treeviewObject.getItem" href="#treeviewObject.getItem">&#x23;</a>
返回TVITEM对象,参数为TVITEM结构体或指定部分成员的table对象.  
参数一也可以是空值,或树节点句柄  
如果参数未指定节点句柄,则取当前选中节点

[返回对象:tvitemObject](#tvitemObject)

### treeviewObject.getItemData(hItem) <a id="treeviewObject.getItemData" href="#treeviewObject.getItemData">&#x23;</a>
返回节点关联数据

### treeviewObject.getItemPath(节点句柄) <a id="treeviewObject.getItemPath" href="#treeviewObject.getItemPath">&#x23;</a>
返回节点路径,以反斜杠分隔父子项目文本  
省略节点参数则取当前选中节点

### treeviewObject.getItemRect(hItem) <a id="treeviewObject.getItemRect" href="#treeviewObject.getItemRect">&#x23;</a>
返回句柄指定节点整行区块(RECT对象)  
省略节点句柄则取当前选中节点

### treeviewObject.getItemRect(hItem,true) <a id="treeviewObject.getItemRect" href="#treeviewObject.getItemRect">&#x23;</a>
返回句柄指定节点文本区块(RECT对象)  
省略节点句柄则取当前选中节点

### treeviewObject.getItemText(节点句柄,缓冲区长度) <a id="treeviewObject.getItemText" href="#treeviewObject.getItemText">&#x23;</a>
返回节点文本  
省略节点参数则取当前选中节点  
缓冲区长度参数可省略,默认为100

### treeviewObject.getNextItem(hItem节点句柄) <a id="treeviewObject.getNextItem" href="#treeviewObject.getNextItem">&#x23;</a>
返回下一个节点,  
第二个参数可选使用 _TVNI_ 前缀的常量指定选项

### treeviewObject.getNextSibling (hItem节点句柄) <a id="treeviewObject.getNextSibling " href="#treeviewObject.getNextSibling ">&#x23;</a>
返回后面的兄弟节点  
参数:节点句柄

### treeviewObject.getNextVisible(hItem节点句柄) <a id="treeviewObject.getNextVisible" href="#treeviewObject.getNextVisible">&#x23;</a>
返回下一个可见节点  
参数:节点句柄

### treeviewObject.getNotifyCustomDraw() <a id="treeviewObject.getNotifyCustomDraw" href="#treeviewObject.getNotifyCustomDraw">&#x23;</a>
[返回对象:NMTVCUSTOMDRAWObject](#NMTVCUSTOMDRAWObject)

### treeviewObject.getNotifyCustomDraw(code,ptr) <a id="treeviewObject.getNotifyCustomDraw" href="#treeviewObject.getNotifyCustomDraw">&#x23;</a>
NM_CUSTOMDRAW通知消息返回NMLVCUSTOMDRAW结构体

### treeviewObject.getNotifyDispInfo() <a id="treeviewObject.getNotifyDispInfo" href="#treeviewObject.getNotifyDispInfo">&#x23;</a>
[返回对象:TVDISPINFOObject](#TVDISPINFOObject)

### treeviewObject.getNotifyDispInfo(code,ptr) <a id="treeviewObject.getNotifyDispInfo" href="#treeviewObject.getNotifyDispInfo">&#x23;</a>
该函数限用于onnotify通知回调函数中  
code参数为通知码,ptr参数为NMHDR指针  
如果NMHDR指针指向TV_DISPINFO对象则返回该对象,否则返回空值

### treeviewObject.getNotifyMessage() <a id="treeviewObject.getNotifyMessage" href="#treeviewObject.getNotifyMessage">&#x23;</a>
[返回对象:NMTREEVIEWObject](#NMTREEVIEWObject)

### treeviewObject.getNotifyMessage(code,ptr) <a id="treeviewObject.getNotifyMessage" href="#treeviewObject.getNotifyMessage">&#x23;</a>
该函数限用于onnotify通知回调函数中  
code参数为通知码,ptr参数为NMHDR指针  
如果code不是大于_TVN_FIRST,并小于_TVN_LAST的消息,  
该函数返回空值,否则返回NMTREEVIEW对象.

### treeviewObject.getParent() <a id="treeviewObject.getParent" href="#treeviewObject.getParent">&#x23;</a>
返回父窗口

### treeviewObject.getParentItem(hItem节点句柄) <a id="treeviewObject.getParentItem" href="#treeviewObject.getParentItem">&#x23;</a>
返回父节点  
参数:节点句柄

### treeviewObject.getParentItemData(hItem) <a id="treeviewObject.getParentItemData" href="#treeviewObject.getParentItemData">&#x23;</a>
返回父节点关联数据

### treeviewObject.getPos() <a id="treeviewObject.getPos" href="#treeviewObject.getPos">&#x23;</a>
返回相对坐标,宽,高  
x,y,cx,cy=win.getPos(hwnd)

### treeviewObject.getPrevSibling(hItem节点句柄) <a id="treeviewObject.getPrevSibling" href="#treeviewObject.getPrevSibling">&#x23;</a>
返回前面的兄弟节点  
参数:节点句柄

### treeviewObject.getPrevVisible(hItem节点句柄) <a id="treeviewObject.getPrevVisible" href="#treeviewObject.getPrevVisible">&#x23;</a>
返回上一个可见节点  
参数:节点句柄

### treeviewObject.getRect() <a id="treeviewObject.getRect" href="#treeviewObject.getRect">&#x23;</a>
控件区块位置(::RECT结构体)

### treeviewObject.getRect(true) <a id="treeviewObject.getRect" href="#treeviewObject.getRect">&#x23;</a>
控件屏幕区块位置(::RECT结构体)

### treeviewObject.getRoot() <a id="treeviewObject.getRoot" href="#treeviewObject.getRoot">&#x23;</a>
返回根节点( TVI_ROOT )  
注意TVI_ROOT的子节点并没有父节点

### treeviewObject.getSelection() <a id="treeviewObject.getSelection" href="#treeviewObject.getSelection">&#x23;</a>
返回当前选中节点

### treeviewObject.height <a id="treeviewObject.height" href="#treeviewObject.height">&#x23;</a>
高度

### treeviewObject.hitTest(x坐标,y坐标,是否屏幕坐标) <a id="treeviewObject.hitTest" href="#treeviewObject.hitTest">&#x23;</a>
该函数返回指定坐标的句柄,参数三可省略,默认为false.  
如果不指定任何参数,则自动调用 win.getMessagePos() 获取消息坐标  
第二个返回值指定测试结果,该值可以是一个或多个_TVHT_开头的常量组合

### treeviewObject.hwnd <a id="treeviewObject.hwnd" href="#treeviewObject.hwnd">&#x23;</a>
控件句柄

### treeviewObject.id <a id="treeviewObject.id" href="#treeviewObject.id">&#x23;</a>
控件ID

### treeviewObject.imageList <a id="treeviewObject.imageList" href="#treeviewObject.imageList">&#x23;</a>
获取设置图像列个  
支持 win.imageList 对象

### treeviewObject.insertItem("插入文本",父项,前面的子项) <a id="treeviewObject.insertItem" href="#treeviewObject.insertItem">&#x23;</a>
参数 @1 可以是普通文本，  
也可传入文本数组以循环插入多个节点。  
可选用参数 @2 指定父节点句柄,可选用参数 @3 指定插入位置前面的节点句柄。  
返回值为新节点句柄。

### treeviewObject.insertItem(TVITEM,父项,前面的子项) <a id="treeviewObject.insertItem" href="#treeviewObject.insertItem">&#x23;</a>
参数 @1 可以是 TVITEM 结构体或指定部分成员的 table 对象。  
参数 @1 可传入 TVITEM 数组以循环插入多个节点。  
此函数可自动检测非空成员并自动设定 TVITEM 的 mask 字段。  
可选用参数 @2 指定父节点句柄,可选用参数 @3 指定插入位置前面的节点句柄。  
返回值为新节点句柄。

### treeviewObject.insertItem(数据表,父项,前面的子项) <a id="treeviewObject.insertItem" href="#treeviewObject.insertItem">&#x23;</a>
参数 @1 可以使用 string.xml 对象或相同结构的表对象。  

表可以指定要插入的单个节点或节点数组：  
- 如果传入数组则以数组元素作为参数 @1 循环调用 insertItem 函数，  
数组元素可以是文本、TVITEM、表、数组等函数支持的对象。  
- 如果传入表示插入单个节点的表，必须指定 tagName 或 text 字段,  
treeview 按 text，label，title，name，tagName 的顺序确定显示标题。  
单个节点如果包含数组成员，或者其 children 字段指定一个数组。  
则以该数组为参数继续调用 insertItem 函数递归插入下级子节点。  

可选用参数 @2 指定父节点句柄，可选用参数 @3 指定插入位置前面的节点句柄。  
返回值为新节点句柄。

### treeviewObject.insertItem(数组,父项,前面的子项) <a id="treeviewObject.insertItem" href="#treeviewObject.insertItem">&#x23;</a>
传入数组则以数组元素作为参数 @1 循环调用 insertItem 函数，  
数组元素可以是文本、TVITEM、表、数组等函数支持的对象。

### treeviewObject.insertTable <a id="treeviewObject.insertTable" href="#treeviewObject.insertTable">&#x23;</a>
显示表对象中的名值对以及数组

### treeviewObject.insertTable(tab,hParent) <a id="treeviewObject.insertTable" href="#treeviewObject.insertTable">&#x23;</a>
显示表对象中的名值对以及数组,  
支持显示嵌套表，表中不应出现循环引用的成员,  
可选用hParent指定父节点句柄

### treeviewObject.invalidate(/*可选使用::RECT()对象指定客户区*/) <a id="treeviewObject.invalidate(/*可选使用::RECT" href="#treeviewObject.invalidate(/*可选使用::RECT">&#x23;</a>
使窗口绘图区无效

### treeviewObject.invalidate(/*可选使用::RECT()对象指定客户区*/,0) <a id="treeviewObject.invalidate(/*可选使用::RECT" href="#treeviewObject.invalidate(/*可选使用::RECT">&#x23;</a>
使窗口绘图区无效  
不刷新背景

### treeviewObject.isExpanded(hItem) <a id="treeviewObject.isExpanded" href="#treeviewObject.isExpanded">&#x23;</a>
节点是否展开状态

### treeviewObject.isExpandedOnce(hItem) <a id="treeviewObject.isExpandedOnce" href="#treeviewObject.isExpandedOnce">&#x23;</a>
节点是否至少展开过一次

### treeviewObject.left <a id="treeviewObject.left" href="#treeviewObject.left">&#x23;</a>
左侧坐标

### treeviewObject.modifyStyle(remove,add,swpFlags) <a id="treeviewObject.modifyStyle" href="#treeviewObject.modifyStyle">&#x23;</a>
修改窗口样式,所有参数都是可选参数,  
@remove 用数值指定要移除的样式,可使用 _WS_ 前缀的常量  
@add 用数值指定要添加的样式,可使用 _WS_ 前缀的常量  
@swpFlags 可选用数值指定调整窗口选项,可使用 _SWP_ 前缀的常量  
如果指定了 @swpFlag ,则使用该参数调用::SetWindowPos  
细节请参考 win.modifyStyle 函数源码

### treeviewObject.modifyStyleEx(remove,add,swpFlags) <a id="treeviewObject.modifyStyleEx" href="#treeviewObject.modifyStyleEx">&#x23;</a>
修改窗口扩展样式,所有参数都是可选参数,  
@remove 用数值指定要移除的样式,可使用 _WS_EX_ 前缀的常量  
@add 用数值指定要添加的样式,可使用 _WS_EX_ 前缀的常量  
@swpFlags 可选用数值指定调整窗口选项,可使用 _SWP_ 前缀的常量  
如果指定了 @swpFlag ,则使用该参数调用::SetWindowPos  
细节请参考 win.modifyStyle 函数源码

### treeviewObject.oncommand <a id="treeviewObject.oncommand" href="#treeviewObject.oncommand">&#x23;</a>

```aardio
treeviewObject.oncommand = function(id,event){  
	/*命令事件触发*/  
}
```

### treeviewObject.onnotify <a id="treeviewObject.onnotify" href="#treeviewObject.onnotify">&#x23;</a>

```aardio
treeviewObject.onnotify = function(id,code,ptr){  
	/*通知事件触发*/  
}
```

### treeviewObject.orphanWindow(transparent,hwndBuddy) <a id="treeviewObject.orphanWindow" href="#treeviewObject.orphanWindow">&#x23;</a>
创建悬浮窗口,  
悬浮窗口仍然显示在原来的位置,  
悬浮窗口如影随形的跟随父窗口移动或改变大小,控件原来的固定边距等参数仍然有效  
此控件不建议指定参数

### treeviewObject.postMessage(msg,wParam,lParam) <a id="treeviewObject.postMessage" href="#treeviewObject.postMessage">&#x23;</a>
投递窗口消息到消息队列中  
此函数用法请参考 ::User32.PostMessage

### treeviewObject.redraw() <a id="treeviewObject.redraw" href="#treeviewObject.redraw">&#x23;</a>
刷新

### treeviewObject.right <a id="treeviewObject.right" href="#treeviewObject.right">&#x23;</a>
右侧坐标

### treeviewObject.selDropHiLite(hItem) <a id="treeviewObject.selDropHiLite" href="#treeviewObject.selDropHiLite">&#x23;</a>
选定节点  
似拖放操作的目标项目高亮显示  
参数指定节点句柄

### treeviewObject.selFirstVisible(hItem) <a id="treeviewObject.selFirstVisible" href="#treeviewObject.selFirstVisible">&#x23;</a>
选定节点并设置到可视区第一行  
参数指定节点句柄

### treeviewObject.sendMessage(msg,wParam,lParam) <a id="treeviewObject.sendMessage" href="#treeviewObject.sendMessage">&#x23;</a>
发送窗口消息  
此函数用法请参考 ::User32.SendMessage

### treeviewObject.setChecked(节点句柄,是否选中) <a id="treeviewObject.setChecked" href="#treeviewObject.setChecked">&#x23;</a>
勾选指定项的复选框  
参数@2,默认值是true

### treeviewObject.setFocus() <a id="treeviewObject.setFocus" href="#treeviewObject.setFocus">&#x23;</a>
设置焦点

### treeviewObject.setFont(指定字体) <a id="treeviewObject.setFont" href="#treeviewObject.setFont">&#x23;</a>
指定LOGFONT字体对象,或逻辑字体句柄

### treeviewObject.setFont(混入字体属性) <a id="treeviewObject.setFont" href="#treeviewObject.setFont">&#x23;</a>

```aardio
treeviewObject.setFont(point=10;name="宋体");
```

### treeviewObject.setImageList( imageList,_TVSIL ) <a id="treeviewObject.setImageList" href="#treeviewObject.setImageList">&#x23;</a>
指定图像列表,  
可选使用 _LVSIL_ 前缀常量指定类型  
treeview控件不负责销毁图像列表，用户应在控件不再使用图像列表后释放图像列表。

### treeviewObject.setItem() <a id="treeviewObject.setItem" href="#treeviewObject.setItem">&#x23;</a>
更新项节点,参数为TVITEM结构体或指定部分成员的table对象  
如果参数未指定节点句柄,则取当前选中节点  
成功返回true;  
此函数可自动检测非空成员并自动设定相应mask位

### treeviewObject.setItemData(hItem,data) <a id="treeviewObject.setItemData" href="#treeviewObject.setItemData">&#x23;</a>
设置关联数据  
data可以是任意对象  
如果添加项时使用的参数是表而不是结构体,默认设置为关联数据

### treeviewObject.setItemText(节点句柄,文本) <a id="treeviewObject.setItemText" href="#treeviewObject.setItemText">&#x23;</a>
设置节点文本  
省略节点参数则取当前选中节点

### treeviewObject.setParent(控件对象) <a id="treeviewObject.setParent" href="#treeviewObject.setParent">&#x23;</a>
改变父窗口

### treeviewObject.setPos(x坐标,y坐标,宽,高,插入位置,参数) <a id="treeviewObject.setPos" href="#treeviewObject.setPos">&#x23;</a>
调整窗口位置或排序,所有参数可选  
同时指定x,y坐标则移动位置  
同时指定宽高则改变大小  
指定插入位置(句柄或_HWND前缀常量)则调整Z序

### treeviewObject.setRect(rc) <a id="treeviewObject.setRect" href="#treeviewObject.setRect">&#x23;</a>
设置控件区块位置(::RECT结构体)

### treeviewObject.setRect(rc,true) <a id="treeviewObject.setRect" href="#treeviewObject.setRect">&#x23;</a>
设置控件屏幕区块位置(::RECT结构体)

### treeviewObject.setRedraw(false) <a id="treeviewObject.setRedraw" href="#treeviewObject.setRedraw">&#x23;</a>
禁止重绘

### treeviewObject.setRedraw(true) <a id="treeviewObject.setRedraw" href="#treeviewObject.setRedraw">&#x23;</a>
恢复重绘

### treeviewObject.setSelected() <a id="treeviewObject.setSelected" href="#treeviewObject.setSelected">&#x23;</a>
不选定任何节点

### treeviewObject.setSelected(hItem) <a id="treeviewObject.setSelected" href="#treeviewObject.setSelected">&#x23;</a>
选定节点  
参数指定节点句柄

### treeviewObject.show(true) <a id="treeviewObject.show" href="#treeviewObject.show">&#x23;</a>
显示控件

### treeviewObject.text <a id="treeviewObject.text" href="#treeviewObject.text">&#x23;</a>
控件文本

### treeviewObject.theme <a id="treeviewObject.theme" href="#treeviewObject.theme">&#x23;</a>
外观主题,例如  
winform.button.theme = "Explorer"  
winform.button.theme = false

### treeviewObject.threadCallable() <a id="treeviewObject.threadCallable" href="#treeviewObject.threadCallable">&#x23;</a>
开启此控件的跨线程调用功能

### treeviewObject.toggle(hItem) <a id="treeviewObject.toggle" href="#treeviewObject.toggle">&#x23;</a>
折叠的就展开,展开的就折叠   
参数为节点句柄,省略则取当前选中项

### treeviewObject.top <a id="treeviewObject.top" href="#treeviewObject.top">&#x23;</a>
顶部坐标

### treeviewObject.translateCommand() <a id="treeviewObject.translateCommand" href="#treeviewObject.translateCommand">&#x23;</a>
允许转发转发子窗口的命令（_WM_COMMAND）与通知（_WM_NOTIFY）消息，  
避免子窗口 oncommand，onnotify 等回调失效。  
同时会处理子窗口的 _WM_CTLCOLORSTATIC 等消息，  
以避免部分外观属性失效

### treeviewObject.update() <a id="treeviewObject.update" href="#treeviewObject.update">&#x23;</a>
重绘invalidate函数指定的区块

### treeviewObject.valid <a id="treeviewObject.valid" href="#treeviewObject.valid">&#x23;</a>
窗口是否有效，  
窗口未关闭返回 true ，  
窗口已关闭或正在关闭返回 false

### treeviewObject.visible <a id="treeviewObject.visible" href="#treeviewObject.visible">&#x23;</a>
当前控件窗口是否显示。  
仅检查当前窗口的可见性样式（窗口 是否具有 _WS_VISIBLE 样式）。  
不考虑父窗口是否可见，不考虑是否被其他窗口遮挡。  
如果需要同时判断父窗口的可见性，应改用 win.isVisible 函数。

### treeviewObject.visibleCount <a id="treeviewObject.visibleCount" href="#treeviewObject.visibleCount">&#x23;</a>
获取可见项总数

### treeviewObject.width <a id="treeviewObject.width" href="#treeviewObject.width">&#x23;</a>
宽度

### treeviewObject.wndproc <a id="treeviewObject.wndproc" href="#treeviewObject.wndproc">&#x23;</a>

```aardio
treeviewObject.wndproc = function(hwnd,message,wParam,lParam){  
	/*窗口消息回调，返回任意非null值阻止默认回调  
wndproc重复赋值时追加函数而不是覆盖之前的回调  
设为null添除所有消息回调函数  
wndproc也可以是一个表,键要为处理的消息,值为对应的消息回调函数*/	  
}
```

## treeviewObject 事件列表 <a id="treeviewObjectEvent" href="#treeviewObjectEvent">&#x23;</a>

### treeviewObject.onClick <a id="treeviewObject.onClick" href="#treeviewObject.onClick">&#x23;</a>

```aardio
treeviewObject.onClick = function(hItem,data){
	/*单击节点触发此事件，  
hItem 为当前节点句柄，data 为该节点绑定的自定义数据。  
可返回 true 阻止默认处理。  
注意在双击后控件自动获取焦点。*/	
}
```

### treeviewObject.onDestroy <a id="treeviewObject.onDestroy" href="#treeviewObject.onDestroy">&#x23;</a>

```aardio
treeviewObject.onDestroy = function(){  
	/*窗口销毁前触发*/  
}
```

### treeviewObject.onDoubleClick <a id="treeviewObject.onDoubleClick" href="#treeviewObject.onDoubleClick">&#x23;</a>

```aardio
treeviewObject.onDoubleClick = function(hItem,data){
	/*双击节点触发此事件，  
hItem 为当前节点句柄，data 为该节点绑定的自定义数据。  
可返回 true 阻止默认处理*/
}
```

### treeviewObject.onRightClick <a id="treeviewObject.onRightClick" href="#treeviewObject.onRightClick">&#x23;</a>

```aardio
treeviewObject.onRightClick = function(hItem,data){
	/*右键点击节点触发此事件，  
hItem 为当前节点句柄，data 为该节点绑定的自定义数据*/	
}
```

### treeviewObject.onSelChanged <a id="treeviewObject.onSelChanged" href="#treeviewObject.onSelChanged">&#x23;</a>

```aardio
treeviewObject.onSelChanged = function(hItem,data,nmTreeView){
	/*改娈当前节点触发此事件，  
hItem 为当前节点句柄，data 为该节点绑定的自定义数据。  
nmTreeView 为 NMTREEVIEW 结构体参数*/
}
```

### treeviewObject.onStateImageChanging <a id="treeviewObject.onStateImageChanging" href="#treeviewObject.onStateImageChanging">&#x23;</a>

```aardio
treeviewObject.onStateImageChanging = function(hItem,checked,newImgIndex,oldImgIndex){

     /*状态图像（通常指复选框）变更触发此事件。  
hItem 为树视图的变更节点句柄。  
checked 为是否切换到勾选图像索引，也就是 2。  
newImgIndex,oldImgIndex 分别为新旧状态图像索引。  
注意勾选操作并不改变当前节点，默认勾选完成会弹回原来的选中节点。  
可调用 setSelected 函数选中当前操作的节点 */
     //选定节点
     winform.treeview.setSelected(hItem);
}
```

## 全局对象 成员列表 <a id="global" href="#global">&#x23;</a>

### _LPSTR_TEXTCALLBACK <a id="_LPSTR_TEXTCALLBACK" href="#_LPSTR_TEXTCALLBACK">&#x23;</a>
`topointer(-1)`

### _TVI_FIRST <a id="_TVI_FIRST" href="#_TVI_FIRST">&#x23;</a>
treeview中表示同级节点中第一个节点的伪句柄

### _TVI_LAST <a id="_TVI_LAST" href="#_TVI_LAST">&#x23;</a>
treeview中表示同级节点中最后一个节点的伪句柄

### _TVI_ROOT <a id="_TVI_ROOT" href="#_TVI_ROOT">&#x23;</a>
treeview中表示根节点的伪句柄

### _TVI_SORT <a id="_TVI_SORT" href="#_TVI_SORT">&#x23;</a>
`topointer(-0x0FFFD)/*_TVI_SORT*/`

## NMTREEVIEWObject 成员列表 <a id="NMTREEVIEWObject" href="#NMTREEVIEWObject">&#x23;</a>

### NMTREEVIEWObject.action <a id="NMTREEVIEWObject.action" href="#NMTREEVIEWObject.action">&#x23;</a>
`0;`

### NMTREEVIEWObject.hdr <a id="NMTREEVIEWObject.hdr" href="#NMTREEVIEWObject.hdr">&#x23;</a>
[返回对象:nmhdrObject](#nmhdrObject)

### NMTREEVIEWObject.itemNew <a id="NMTREEVIEWObject.itemNew" href="#NMTREEVIEWObject.itemNew">&#x23;</a>
[返回对象:tvitemObject](#tvitemObject)

### NMTREEVIEWObject.itemOld <a id="NMTREEVIEWObject.itemOld" href="#NMTREEVIEWObject.itemOld">&#x23;</a>
[返回对象:tvitemObject](#tvitemObject)

### NMTREEVIEWObject.ptDrag <a id="NMTREEVIEWObject.ptDrag" href="#NMTREEVIEWObject.ptDrag">&#x23;</a>
[返回对象:pointObject](https://www.aardio.com/zh-cn/docs/library-reference/gdip/core.html#pointObject)

## NMTVCUSTOMDRAWObject 成员列表 <a id="NMTVCUSTOMDRAWObject" href="#NMTVCUSTOMDRAWObject">&#x23;</a>

### NMTVCUSTOMDRAWObject.clrText <a id="NMTVCUSTOMDRAWObject.clrText" href="#NMTVCUSTOMDRAWObject.clrText">&#x23;</a>
文字颜色

### NMTVCUSTOMDRAWObject.clrTextBk <a id="NMTVCUSTOMDRAWObject.clrTextBk" href="#NMTVCUSTOMDRAWObject.clrTextBk">&#x23;</a>
文字背景色

### NMTVCUSTOMDRAWObject.iLevel <a id="NMTVCUSTOMDRAWObject.iLevel" href="#NMTVCUSTOMDRAWObject.iLevel">&#x23;</a>
嵌套级别

### NMTVCUSTOMDRAWObject.nmcd.dwDrawStage <a id="NMTVCUSTOMDRAWObject.nmcd.dwDrawStage" href="#NMTVCUSTOMDRAWObject.nmcd.dwDrawStage">&#x23;</a>
绘图状态

### NMTVCUSTOMDRAWObject.nmcd.dwItemSpec <a id="NMTVCUSTOMDRAWObject.nmcd.dwItemSpec" href="#NMTVCUSTOMDRAWObject.nmcd.dwItemSpec">&#x23;</a>
行序号

### NMTVCUSTOMDRAWObject.nmcd.hdc <a id="NMTVCUSTOMDRAWObject.nmcd.hdc" href="#NMTVCUSTOMDRAWObject.nmcd.hdc">&#x23;</a>
设置句柄

### NMTVCUSTOMDRAWObject.nmcd.hdr <a id="NMTVCUSTOMDRAWObject.nmcd.hdr" href="#NMTVCUSTOMDRAWObject.nmcd.hdr">&#x23;</a>
[返回对象:nmhdrObject](#nmhdrObject)

### NMTVCUSTOMDRAWObject.nmcd.lItemlParam <a id="NMTVCUSTOMDRAWObject.nmcd.lItemlParam" href="#NMTVCUSTOMDRAWObject.nmcd.lItemlParam">&#x23;</a>
`lItemlParam`

### NMTVCUSTOMDRAWObject.nmcd.rc <a id="NMTVCUSTOMDRAWObject.nmcd.rc" href="#NMTVCUSTOMDRAWObject.nmcd.rc">&#x23;</a>
[返回对象:rectObject](https://www.aardio.com/zh-cn/docs/library-reference/global/_.html#rectObject)

### NMTVCUSTOMDRAWObject.nmcd.uItemState <a id="NMTVCUSTOMDRAWObject.nmcd.uItemState" href="#NMTVCUSTOMDRAWObject.nmcd.uItemState">&#x23;</a>
`uItemState`

### NMTVCUSTOMDRAWObject.update() <a id="NMTVCUSTOMDRAWObject.update" href="#NMTVCUSTOMDRAWObject.update">&#x23;</a>
更新数据

## TVDISPINFOObject 成员列表 <a id="TVDISPINFOObject" href="#TVDISPINFOObject">&#x23;</a>

### TVDISPINFOObject.hdr <a id="TVDISPINFOObject.hdr" href="#TVDISPINFOObject.hdr">&#x23;</a>
[返回对象:nmhdrObject](#nmhdrObject)

### TVDISPINFOObject.item <a id="TVDISPINFOObject.item" href="#TVDISPINFOObject.item">&#x23;</a>
[返回对象:tvitemObject](#tvitemObject)

## tvitemObject 成员列表 <a id="tvitemObject" href="#tvitemObject">&#x23;</a>

### tvitemObject.cChildren <a id="tvitemObject.cChildren" href="#tvitemObject.cChildren">&#x23;</a>
子项目数目  
如果为-1则向父窗体发送_TVN_GETDISPINFO通知消息

### tvitemObject.cchTextMax <a id="tvitemObject.cchTextMax" href="#tvitemObject.cchTextMax">&#x23;</a>
取文本时可在此指定缓冲区长度

### tvitemObject.hItem <a id="tvitemObject.hItem" href="#tvitemObject.hItem">&#x23;</a>
节点句柄

### tvitemObject.iImage <a id="tvitemObject.iImage" href="#tvitemObject.iImage">&#x23;</a>
项目非选取状态下,要使用的image在图象列表中的索引

### tvitemObject.iSelectedImage <a id="tvitemObject.iSelectedImage" href="#tvitemObject.iSelectedImage">&#x23;</a>
项目选取状态下,要使用的image在图象列表中的索引

### tvitemObject.lParam <a id="tvitemObject.lParam" href="#tvitemObject.lParam">&#x23;</a>
数值

### tvitemObject.mask <a id="tvitemObject.mask" href="#tvitemObject.mask">&#x23;</a>
可使用一个或多个TVIF_开头的常量组合  
以指定当前结构体哪些成员有效

### tvitemObject.state <a id="tvitemObject.state" href="#tvitemObject.state">&#x23;</a>
可使用一个或多上TVIS_开头的常量组合

### tvitemObject.stateMask <a id="tvitemObject.stateMask" href="#tvitemObject.stateMask">&#x23;</a>
数值

### tvitemObject.text <a id="tvitemObject.text" href="#tvitemObject.text">&#x23;</a>
文本

### 全局常量

### _LPSTR_TEXTCALLBACK <a id="_LPSTR_TEXTCALLBACK" href="#_LPSTR_TEXTCALLBACK">&#x23;</a>
`topointer(-1)`

### _TVI_FIRST <a id="_TVI_FIRST" href="#_TVI_FIRST">&#x23;</a>
treeview中表示同级节点中第一个节点的伪句柄

### _TVI_LAST <a id="_TVI_LAST" href="#_TVI_LAST">&#x23;</a>
treeview中表示同级节点中最后一个节点的伪句柄

### _TVI_ROOT <a id="_TVI_ROOT" href="#_TVI_ROOT">&#x23;</a>
treeview中表示根节点的伪句柄

### _TVI_SORT <a id="_TVI_SORT" href="#_TVI_SORT">&#x23;</a>
`topointer(-0x0FFFD)/*_TVI_SORT*/`

### 自动完成常量
_I_CHILDRENCALLBACK=-1  
_I_IMAGECALLBACK=-1  
_TVE_COLLAPSE=1  
_TVE_EXPAND=2  
_TVE_TOGGLE=3  
_TVGN_CARET=9  
_TVGN_CHILD=4  
_TVGN_DROPHILITE=8  
_TVGN_FIRSTVISIBLE=5  
_TVGN_LASTVISIBLE=0xA  
_TVGN_NEXT=1  
_TVGN_NEXTSELECTED=0xB  
_TVGN_NEXTVISIBLE=6  
_TVGN_PARENT=3  
_TVGN_PREVIOUS=2  
_TVGN_PREVIOUSVISIBLE=7  
_TVGN_ROOT=0  
_TVHT_ABOVE=0x100  
_TVHT_BELOW=0x200  
_TVHT_NOWHERE=1  
_TVHT_ONITEM=0x46  
_TVHT_ONITEMBUTTON=0x10  
_TVHT_ONITEMICON=2  
_TVHT_ONITEMINDENT=8  
_TVHT_ONITEMLABEL=4  
_TVHT_ONITEMRIGHT=0x20  
_TVHT_ONITEMSTATEICON=0x40  
_TVHT_TOLEFT=0x800  
_TVHT_TORIGHT=0x400  
_TVIF_CHILDREN=0x40  
_TVIF_EXPANDEDIMAGE=0x200  
_TVIF_HANDLE=0x10  
_TVIF_IMAGE=2  
_TVIF_INTEGRAL=0x80  
_TVIF_PARAM=4  
_TVIF_SELECTEDIMAGE=0x20  
_TVIF_STATE=8  
_TVIF_STATEEX=0x100  
_TVIF_TEXT=1  
_TVIS_BOLD=0x10  
_TVIS_CUT=4  
_TVIS_DROPHILITED=8  
_TVIS_EXPANDED=0x20  
_TVIS_EXPANDEDONCE=0x40  
_TVIS_EXPANDPARTIAL=0x80  
_TVIS_EX_ALL=2  
_TVIS_EX_DISABLED=2  
_TVIS_EX_FLAT=1  
_TVIS_OVERLAYMASK=0xF00  
_TVIS_SELECTED=2  
_TVIS_STATEIMAGEMASK=0xF000  
_TVIS_USERMASK=0xF000  
_TVM_CREATEDRAGIMAGE=0x1112  
_TVM_DELETEITEM=0x1101  
_TVM_EDITLABELW=0x1141  
_TVM_ENDEDITLABELNOW=0x1116  
_TVM_ENSUREVISIBLE=0x1114  
_TVM_GETCOUNT=0x1105  
_TVM_GETIMAGELIST=0x1108  
_TVM_GETINDENT=0x1106  
_TVM_GETINSERTMARKCOLOR=0x1126  
_TVM_GETISEARCHSTRINGA=0x1117  
_TVM_GETISEARCHSTRINGW=0x1140  
_TVM_GETITEMHEIGHT=0x111C  
_TVM_GETITEMRECT=0x1104  
_TVM_GETITEMSTATE=0x1127  
_TVM_GETITEMW=0x113E  
_TVM_GETLINECOLOR=0x1129  
_TVM_GETNEXTITEM=0x110A  
_TVM_GETSCROLLTIME=0x1122  
_TVM_GETTOOLTIPS=0x1119  
_TVM_GETVISIBLECOUNT=0x1110  
_TVM_HITTEST=0x1111  
_TVM_INSERTITEMW=0x1132  
_TVM_SETIMAGELIST=0x1109  
_TVM_SETINDENT=0x1107  
_TVM_SETINSERTMARK=0x111A  
_TVM_SETINSERTMARKCOLOR=0x1125  
_TVM_SETITEMHEIGHT=0x111B  
_TVM_SETITEMW=0x113F  
_TVM_SETLINECOLOR=0x1128  
_TVM_SETSCROLLTIME=0x1121  
_TVM_SETTOOLTIPS=0x1118  
_TVM_SORTCHILDREN=0x1113  
_TVM_SORTCHILDRENCB=0x1115  
_TVNRET_DEFAULT=0  
_TVNRET_SKIPNEW=2  
_TVNRET_SKIPOLD=1  
_TVN_ASYNCDRAW=0xFFFFFE5C  
_TVN_BEGINDRAGW=0xFFFFFE38  
_TVN_BEGINLABELEDITW=0xFFFFFE35  
_TVN_BEGINRDRAGW=0xFFFFFE37  
_TVN_DELETEITEMW=0xFFFFFE36  
_TVN_ENDLABELEDITW=0xFFFFFE34  
_TVN_FIRST=0xFFFFFE70  
_TVN_GETDISPINFOW=0xFFFFFE3C  
_TVN_GETINFOTIPW=0xFFFFFE62  
_TVN_ITEMCHANGEDW=0xFFFFFE5D  
_TVN_ITEMCHANGINGW=0xFFFFFE5F  
_TVN_ITEMEXPANDEDW=0xFFFFFE39  
_TVN_ITEMEXPANDINGW=0xFFFFFE3A  
_TVN_KEYDOWN=0xFFFFFE64  
_TVN_LAST=0xFFFFFE0D  
_TVN_SELCHANGEDW=0xFFFFFE3D  
_TVN_SELCHANGINGW=0xFFFFFE3E  
_TVN_SINGLEEXPAND=0xFFFFFE61  
_TVSIL_NORMAL=0  
_TVSIL_STATE=2  
_TVSI_NOSINGLEEXPAND=0x8000  
_TVS_DISABLEDRAGDROP=0x10  
_TVS_EX_AUTOHSCROLL=0x20  
_TVS_EX_DIMMEDCHECKBOXES=0x200  
_TVS_EX_DOUBLEBUFFER=4  
_TVS_EX_DRAWIMAGEASYNC=0x400  
_TVS_EX_EXCLUSIONCHECKBOXES=0x100  
_TVS_EX_FADEINOUTEXPANDOS=0x40  
_TVS_EX_MULTISELECT=2  
_TVS_EX_NOINDENTSTATE=8  
_TVS_EX_PARTIALCHECKBOXES=0x80  
_TVS_EX_RICHTOOLTIP=0x10  
_TVS_NONEVENHEIGHT=0x4000  
_TVS_RTLREADING=0x40  
_TVS_SHOWSELALWAYS=0x20  
_TVS_TRACKSELECT=0x200  
_TV_FIRST=0x1100  
