# win.ui.ctrl.thread 库模块帮助文档

[web.view 范例](https://www.aardio.com/zh-cn/docs/examples/WebUI/web.view/OtherApps/threadCtrl.html) [线程控件范例](https://www.aardio.com/zh-cn/docs/examples/aardio/Thread/threadCtrl.html) 

## win.ui.ctrl 成员列表 <a id="win.ui.ctrl" href="#win.ui.ctrl">&#x23;</a>

### win.ui.ctrl.thread <a id="win.ui.ctrl.thread" href="#win.ui.ctrl.thread">&#x23;</a>
多线程控件。  
此控件自动创建新的线程并在线程中创建窗口。  
创建控件的参数表中 cls 字段必须指定为 "thread"。  
loadForm 字段必须指定创建窗体（win.form 对象）的函数或代码（或代码文件路径）。  
创建窗体的代码必须遵守线程规则，可使用 `...` 或第一个参数接收父窗口在当前线程的代理对象。  
也可以使用创建的线程控件窗口的 threadParent 字段访问父窗口在当前线程的代理对象。

### win.ui.ctrl.thread() <a id="win.ui.ctrl.thread" href="#win.ui.ctrl.thread">&#x23;</a>
线程控件  

[返回对象:CtrlThreadObject](#CtrlThreadObject)

## CtrlThreadObject 成员列表 <a id="CtrlThreadObject" href="#CtrlThreadObject">&#x23;</a>

### CtrlThreadObject._parentForm <a id="CtrlThreadObject._parentForm" href="#CtrlThreadObject._parentForm">&#x23;</a>
返回创建控件的容器窗口（win.form对象），所有窗口控件都拥有此只读属性。  
对于使用窗体设计器创建的窗口，也就是返回设计时窗体容器。  

即使子窗口移除子窗口样式、更改父子关系，或以 orphanWindow显示，  
控件的 _parentForm 始终都不会改变  

[返回对象:winform](https://www.aardio.com/zh-cn/docs/library-reference/win/ui/_.html#winform)

### CtrlThreadObject.adjust <a id="CtrlThreadObject.adjust" href="#CtrlThreadObject.adjust">&#x23;</a>

```aardio
CtrlThreadObject.adjust = function( cx,cy,wParam ) {	   
	/*父窗口改变大小后会自动触发此事件函数。  
注意 onSize 是 adjust 事件的别名，作用相同。  
所有 win.form 创建的窗体和控件都支持 adjust 事件,  
重复赋值 adjust 会追加事件触发器而非替换原来的值。  

cx 参数为窗口客户区宽度,cy 参数为窗口客户区高度,  
wParam 参数来自 _WM_SIZE 消息的 wParam 参数，一般不用管。  
一般不建议添加一个 wndproc 仅仅是为了处理  _WM_SIZE 消息，  
定义 adjust 事件是更好的选择。  

如果主动调用此函数，则检查并执行所有之前添加的 adjust 事件函数。  
省略调用参数时 cx,cy 参数默认设为窗口大小*/    
};
```

### CtrlThreadObject.autoResize <a id="CtrlThreadObject.autoResize" href="#CtrlThreadObject.autoResize">&#x23;</a>
是否允许跟随父窗体自动缩放

### CtrlThreadObject.bottom <a id="CtrlThreadObject.bottom" href="#CtrlThreadObject.bottom">&#x23;</a>
底部坐标

### CtrlThreadObject.close() <a id="CtrlThreadObject.close" href="#CtrlThreadObject.close">&#x23;</a>
关闭控件窗口

### CtrlThreadObject.cls <a id="CtrlThreadObject.cls" href="#CtrlThreadObject.cls">&#x23;</a>
设计时类名

### CtrlThreadObject.getClientRect() <a id="CtrlThreadObject.getClientRect" href="#CtrlThreadObject.getClientRect">&#x23;</a>
控件客户区块位置(::RECT结构体)  

[返回对象:rectObject](https://www.aardio.com/zh-cn/docs/library-reference/global/_.html#rectObject)

### CtrlThreadObject.getForm() <a id="CtrlThreadObject.getForm" href="#CtrlThreadObject.getForm">&#x23;</a>
标准库 win.ui 创建的所有窗体与控件对象都拥有此属性。  
win.form 创建的窗体对象返回自身，其他控件对象返回创建控件的容器窗口（ _parentForm 属性 ）

### CtrlThreadObject.getPos() <a id="CtrlThreadObject.getPos" href="#CtrlThreadObject.getPos">&#x23;</a>
返回相对父窗口客户区的坐标,宽,高,  
参数为true返回屏幕坐标,宽,高,  
x,y,cx,cy=win.getPos(hwnd)

### CtrlThreadObject.getRect() <a id="CtrlThreadObject.getRect" href="#CtrlThreadObject.getRect">&#x23;</a>
控件区块位置(::RECT结构体)

### CtrlThreadObject.getRect(true) <a id="CtrlThreadObject.getRect" href="#CtrlThreadObject.getRect">&#x23;</a>
控件屏幕区块位置(::RECT结构体)

### CtrlThreadObject.height <a id="CtrlThreadObject.height" href="#CtrlThreadObject.height">&#x23;</a>
高度

### CtrlThreadObject.hwnd <a id="CtrlThreadObject.hwnd" href="#CtrlThreadObject.hwnd">&#x23;</a>
控件句柄

### CtrlThreadObject.isForm <a id="CtrlThreadObject.isForm" href="#CtrlThreadObject.isForm">&#x23;</a>
标准库 win.ui 创建的所有窗体与控件对象都拥有此属性。  
win.form 创建的窗体对象返回 true,其他控件对象返回 false 。

### CtrlThreadObject.left <a id="CtrlThreadObject.left" href="#CtrlThreadObject.left">&#x23;</a>
左侧坐标

### CtrlThreadObject.loadForm <a id="CtrlThreadObject.loadForm" href="#CtrlThreadObject.loadForm">&#x23;</a>
只能在创建控件的参数中使用此字段（设计时属性）。  
用于指定要加载窗体的函数、代码（或者代码文件路径）。  
控件会创建新的线程执行 loadForm 指定的函数或代码，  
创建窗体的代码必须遵守线程规则，可使用 `...` 可使用 `...` 或第一个参数接收父窗口在当前线程的代理对象。

### CtrlThreadObject.modifyStyle(remove,add,swpFlags) <a id="CtrlThreadObject.modifyStyle" href="#CtrlThreadObject.modifyStyle">&#x23;</a>
修改窗口样式,所有参数都是可选参数,  
@remove 用数值指定要移除的样式,可使用 _WS_ 前缀的常量  
@add 用数值指定要添加的样式,可使用 _WS_ 前缀的常量  
@swpFlags 可选用数值指定调整窗口选项,可使用 _SWP_ 前缀的常量  
如果指定了 @swpFlag ,则使用该参数调用::SetWindowPos  
细节请参考 win.modifyStyle 函数源码

### CtrlThreadObject.modifyStyleEx(remove,add,swpFlags) <a id="CtrlThreadObject.modifyStyleEx" href="#CtrlThreadObject.modifyStyleEx">&#x23;</a>
修改窗口扩展样式,所有参数都是可选参数,  
@remove 用数值指定要移除的样式,可使用 _WS_EX_ 前缀的常量  
@add 用数值指定要添加的样式,可使用 _WS_EX_ 前缀的常量  
@swpFlags 可选用数值指定调整窗口选项,可使用 _SWP_ 前缀的常量  
如果指定了 @swpFlag ,则使用该参数调用::SetWindowPos  
细节请参考 win.modifyStyle 函数源码

### CtrlThreadObject.orphanWindow <a id="CtrlThreadObject.orphanWindow" href="#CtrlThreadObject.orphanWindow">&#x23;</a>
如果当前是子窗口,  
移除窗口的WS_CHILD样式，使窗口孤立出来悬浮于原位置,  
悬浮窗口如影随形的跟随父窗口移动或改变大小,控件原来的固定边距等参数仍然有效

### CtrlThreadObject.orphanWindow(transparent,hwndBuddy,borderless) <a id="CtrlThreadObject.orphanWindow" href="#CtrlThreadObject.orphanWindow">&#x23;</a>
创建悬浮窗口。  
悬浮窗口是模仿子窗口外观效果的独立窗口，父窗口可自动调整子窗口到设定位置。  
可选参数 @transparent 为 true 则转换为分层透明窗口。  
可选利用 @hwndBuddy 参数指定外部进程窗口句柄的并附加在内部控件上以实现相同的效果。  
伙伴窗口总是会保持在悬浮窗口前面，并保持相同的大小、位置。  
可重复调用此函数更换伙伴窗口，旧的伙伴窗口必须自行关闭。  
可选指定 @borderless 参数 为 true 以移除 @hwndBuddy  的窗口边框。

### CtrlThreadObject.preadjust <a id="CtrlThreadObject.preadjust" href="#CtrlThreadObject.preadjust">&#x23;</a>

```aardio
CtrlThreadObject.preadjust = function( cx,cy,wParam ) {	   
	/*窗口缩放后重绘前、触发 adjust 事件之前触发此事件。  
所有 win.form 创建的窗体和控件都支持此事件,  
与 adjust 事件不同，对 preadjust 重复赋值则覆盖而不是追加事件。   

cx 参数为窗口宽度,cy 参数为窗口高度,  
wParam 为 _WM_SIZE 消息参数。*/    
};
```

### CtrlThreadObject.redraw() <a id="CtrlThreadObject.redraw" href="#CtrlThreadObject.redraw">&#x23;</a>
刷新

### CtrlThreadObject.resize(宽度,高度) <a id="CtrlThreadObject.resize" href="#CtrlThreadObject.resize">&#x23;</a>
如果指定了参数则调整窗口大小,  
无论是否实际调整窗口大小,发送 _WM_SIZE 消息给窗口

### CtrlThreadObject.right <a id="CtrlThreadObject.right" href="#CtrlThreadObject.right">&#x23;</a>
右侧坐标

### CtrlThreadObject.setFocus() <a id="CtrlThreadObject.setFocus" href="#CtrlThreadObject.setFocus">&#x23;</a>
设置焦点

### CtrlThreadObject.setPos(x坐标,y坐标,宽,高,插入位置,参数) <a id="CtrlThreadObject.setPos" href="#CtrlThreadObject.setPos">&#x23;</a>
调整窗口位置或排序,所有参数可选  
同时指定x,y坐标则移动位置  
同时指定宽高则改变大小  
指定插入位置(句柄或_HWND前缀常量)则调整Z序

### CtrlThreadObject.setRect(rc) <a id="CtrlThreadObject.setRect" href="#CtrlThreadObject.setRect">&#x23;</a>
设置控件区块位置(::RECT结构体)

### CtrlThreadObject.setRect(rc,true) <a id="CtrlThreadObject.setRect" href="#CtrlThreadObject.setRect">&#x23;</a>
设置控件屏幕区块位置(::RECT结构体)

### CtrlThreadObject.show(true) <a id="CtrlThreadObject.show" href="#CtrlThreadObject.show">&#x23;</a>
显示控件

### CtrlThreadObject.top <a id="CtrlThreadObject.top" href="#CtrlThreadObject.top">&#x23;</a>
顶部坐标

### CtrlThreadObject.valid <a id="CtrlThreadObject.valid" href="#CtrlThreadObject.valid">&#x23;</a>
窗口是否有效，  
窗口未关闭返回 true ，  
窗口已关闭或正在关闭返回 false

### CtrlThreadObject.visible <a id="CtrlThreadObject.visible" href="#CtrlThreadObject.visible">&#x23;</a>
当前控件窗口是否显示。  
仅检查当前窗口的可见性样式（窗口 是否具有 _WS_VISIBLE 样式）。  
不考虑父窗口是否可见，不考虑是否被其他窗口遮挡。  
如果需要同时判断父窗口的可见性，应改用 win.isVisible 函数。

### CtrlThreadObject.width <a id="CtrlThreadObject.width" href="#CtrlThreadObject.width">&#x23;</a>
宽度

## CtrlThreadObject 事件列表 <a id="CtrlThreadObjectEvent" href="#CtrlThreadObjectEvent">&#x23;</a>

### CtrlThreadObject.onDestroy <a id="CtrlThreadObject.onDestroy" href="#CtrlThreadObject.onDestroy">&#x23;</a>

```aardio
CtrlThreadObject.onDestroy = function(){  
	/*窗口销毁前触发*/  
}
```

