# win.ui.ctrl.tab 库模块帮助文档

[简单选项卡使用指南](https://www.aardio.com/zh-cn/docs/library-guide/std/win/ui/ctrl/tab.html)

## win.ui.ctrl 成员列表 <a id="win.ui.ctrl" href="#win.ui.ctrl">&#x23;</a>

### win.ui.ctrl.tab() <a id="win.ui.ctrl.tab" href="#win.ui.ctrl.tab">&#x23;</a>
简单选项卡控件（ classic tab control ）  

[返回对象:uiTabObject](#uiTabObject)

## uiTabObject 成员列表 <a id="uiTabObject" href="#uiTabObject">&#x23;</a>

### uiTabObject._parentForm <a id="uiTabObject._parentForm" href="#uiTabObject._parentForm">&#x23;</a>
返回创建控件的容器窗口（win.form对象），所有窗口控件都拥有此只读属性。  
对于使用窗体设计器创建的窗口，也就是返回设计时窗体容器。  

即使子窗口移除子窗口样式、更改父子关系，或以 orphanWindow显示，  
控件的 _parentForm 始终都不会改变  

[返回对象:winform](https://www.aardio.com/zh-cn/docs/library-reference/win/ui/_.html#winform)

### uiTabObject.add() <a id="uiTabObject.add" href="#uiTabObject.add">&#x23;</a>
创建选项卡（同时创建选项卡按钮与显示内容的子窗口），返回子窗口（win.form 对象）。  

参数 @1 指定一个表参数，与 win.form 对象的构造参数相同。  
可在窗体设计器中复制  win.form 对象的构造参数作为此函数的参数。  
表参数中的 text 字段指定表示选项卡标题（也即子窗口标题）。  
参数 @1 也可以用字符串指定创建子窗口的代码文件路径。

[返回对象:winform](https://www.aardio.com/zh-cn/docs/library-reference/win/ui/_.html#winform)

### uiTabObject.adjust <a id="uiTabObject.adjust" href="#uiTabObject.adjust">&#x23;</a>

```aardio
uiTabObject.adjust = function( cx,cy,wParam ) {	   
	/*窗口缩放时会自动触发此函数。  
cx 参数为窗口宽度,cy 参数为窗口高度,  
wParam 参数请参考 _WM_SIZE 消息参数说明,一般不用管。  

所有 win.form 创建的窗体和控件都支持此事件,  
重复赋值只会追加而不会覆盖此事件。  
一般不建议添加一个 wndproc 仅仅是为了处理  _WM_SIZE 消息，  
定义 adjust 事件是更好的选择。  

可主动调用此事件,省略参数时 cx,cy 参数默认设为窗口大小*/    
};
```

### uiTabObject.adjustRect() <a id="uiTabObject.adjustRect" href="#uiTabObject.adjustRect">&#x23;</a>
调整子窗口大小以适应客户区

### uiTabObject.bottom <a id="uiTabObject.bottom" href="#uiTabObject.bottom">&#x23;</a>
底部坐标

### uiTabObject.capture <a id="uiTabObject.capture" href="#uiTabObject.capture">&#x23;</a>
是否捕获全局鼠标消息

### uiTabObject.className <a id="uiTabObject.className" href="#uiTabObject.className">&#x23;</a>
运行时类名

### uiTabObject.clear() <a id="uiTabObject.clear" href="#uiTabObject.clear">&#x23;</a>
移除所有选项卡

### uiTabObject.close() <a id="uiTabObject.close" href="#uiTabObject.close">&#x23;</a>
关闭控件窗口

### uiTabObject.cls <a id="uiTabObject.cls" href="#uiTabObject.cls">&#x23;</a>
设计时类名

### uiTabObject.count <a id="uiTabObject.count" href="#uiTabObject.count">&#x23;</a>
返回选项卡包含的选项总数

### uiTabObject.delete() <a id="uiTabObject.delete" href="#uiTabObject.delete">&#x23;</a>
参数为数值,移除指定索引的选项页

### uiTabObject.disabled <a id="uiTabObject.disabled" href="#uiTabObject.disabled">&#x23;</a>
是否禁用

### uiTabObject.form <a id="uiTabObject.form" href="#uiTabObject.form">&#x23;</a>
[返回对象:winform](https://www.aardio.com/zh-cn/docs/library-reference/win/ui/_.html#winform)

### uiTabObject.forms <a id="uiTabObject.forms" href="#uiTabObject.forms">&#x23;</a>
返回子窗口列表,只读属性

### uiTabObject.forms.* <a id="uiTabObject.forms.any" href="#uiTabObject.forms.any">&#x23;</a>
选项卡子窗口  

[返回对象:winform](https://www.aardio.com/zh-cn/docs/library-reference/win/ui/_.html#winform)

### uiTabObject.getClientRect() <a id="uiTabObject.getClientRect" href="#uiTabObject.getClientRect">&#x23;</a>
控件客户区块位置(::RECT结构体)  

[返回对象:rectObject](https://www.aardio.com/zh-cn/docs/library-reference/global/_.html#rectObject)

### uiTabObject.getFont() <a id="uiTabObject.getFont" href="#uiTabObject.getFont">&#x23;</a>
控件字体(::LOGFONT结构体)  

[返回对象:logfontObject](#logfontObject)

### uiTabObject.getItem(索引) <a id="uiTabObject.getItem" href="#uiTabObject.getItem">&#x23;</a>
读取选项结构体

### uiTabObject.getItemRect(索引) <a id="uiTabObject.getItemRect" href="#uiTabObject.getItemRect">&#x23;</a>
读取选项卡区块位置

### uiTabObject.getItemText(索引) <a id="uiTabObject.getItemText" href="#uiTabObject.getItemText">&#x23;</a>
读取选项卡标题

### uiTabObject.getParent() <a id="uiTabObject.getParent" href="#uiTabObject.getParent">&#x23;</a>
返回父窗口  

[返回对象:staticObject](https://www.aardio.com/zh-cn/docs/library-reference/win/ui/ctrl/static.html#staticObject)

### uiTabObject.getPos() <a id="uiTabObject.getPos" href="#uiTabObject.getPos">&#x23;</a>
返回相对坐标,宽,高  
x,y,cx,cy=win.getPos(hwnd)

### uiTabObject.getRect() <a id="uiTabObject.getRect" href="#uiTabObject.getRect">&#x23;</a>
控件区块位置(::RECT结构体)

### uiTabObject.getRect(true) <a id="uiTabObject.getRect" href="#uiTabObject.getRect">&#x23;</a>
控件屏幕区块位置(::RECT结构体)

### uiTabObject.height <a id="uiTabObject.height" href="#uiTabObject.height">&#x23;</a>
高度

### uiTabObject.hitTest(x坐标,y坐标,是否屏幕坐标) <a id="uiTabObject.hitTest" href="#uiTabObject.hitTest">&#x23;</a>
返回坐标指向的选项索引  
参数三可省略,默认为false.  
如果不指定任何参数,则自动调用 win.getMessagePos() 获取消息坐标

### uiTabObject.hwnd <a id="uiTabObject.hwnd" href="#uiTabObject.hwnd">&#x23;</a>
控件句柄

### uiTabObject.id <a id="uiTabObject.id" href="#uiTabObject.id">&#x23;</a>
控件ID

### uiTabObject.invalidate(/*可选使用::RECT()对象指定客户区*/) <a id="uiTabObject.invalidate(/*可选使用::RECT" href="#uiTabObject.invalidate(/*可选使用::RECT">&#x23;</a>
使窗口绘图区无效

### uiTabObject.invalidate(/*可选使用::RECT()对象指定客户区*/,0) <a id="uiTabObject.invalidate(/*可选使用::RECT" href="#uiTabObject.invalidate(/*可选使用::RECT">&#x23;</a>
使窗口绘图区无效  
不刷新背景

### uiTabObject.left <a id="uiTabObject.left" href="#uiTabObject.left">&#x23;</a>
左侧坐标

### uiTabObject.loadForm <a id="uiTabObject.loadForm" href="#uiTabObject.loadForm">&#x23;</a>
加载并添加显示内容的子窗口到选项卡控件。  
返回加载到选项卡的子窗体（ win.form 对象）。

### uiTabObject.loadForm(codePath) <a id="uiTabObject.loadForm" href="#uiTabObject.loadForm">&#x23;</a>
加载并添加显示内容的子窗口到选项卡控件。  
返回加载到选项卡的子窗体（ win.form 对象）。  

参数 @codePath 指定创建窗体的代码文件路径。  
请注意保存外部窗体文件以后测试运行。

### uiTabObject.loadForm(tParam) <a id="uiTabObject.loadForm" href="#uiTabObject.loadForm">&#x23;</a>
使用表参数 @tParam 创建显示内容的子窗口并添加到选项卡控件。  
返回加载到选项卡的子窗体（ win.form 对象）。  

参数 @tParam 用法与 win.form 构造参数相同。

### uiTabObject.modifyStyle(remove,add,swpFlags) <a id="uiTabObject.modifyStyle" href="#uiTabObject.modifyStyle">&#x23;</a>
修改窗口样式,所有参数都是可选参数,  
@remove 用数值指定要移除的样式,可使用 _WS_ 前缀的常量  
@add 用数值指定要添加的样式,可使用 _WS_ 前缀的常量  
@swpFlags 可选用数值指定调整窗口选项,可使用 _SWP_ 前缀的常量  
如果指定了 @swpFlag ,则使用该参数调用::SetWindowPos  
细节请参考 win.modifyStyle 函数源码

### uiTabObject.modifyStyleEx(remove,add,swpFlags) <a id="uiTabObject.modifyStyleEx" href="#uiTabObject.modifyStyleEx">&#x23;</a>
修改窗口扩展样式,所有参数都是可选参数,  
@remove 用数值指定要移除的样式,可使用 _WS_EX_ 前缀的常量  
@add 用数值指定要添加的样式,可使用 _WS_EX_ 前缀的常量  
@swpFlags 可选用数值指定调整窗口选项,可使用 _SWP_ 前缀的常量  
如果指定了 @swpFlag ,则使用该参数调用::SetWindowPos  
细节请参考 win.modifyStyle 函数源码

### uiTabObject.oncommand <a id="uiTabObject.oncommand" href="#uiTabObject.oncommand">&#x23;</a>

```aardio
uiTabObject.oncommand = function(id,event){  
	/*命令事件触发*/  
}
```

### uiTabObject.onnotify <a id="uiTabObject.onnotify" href="#uiTabObject.onnotify">&#x23;</a>

```aardio
uiTabObject.onnotify = function(id,code,ptr){  
	/*通知事件触发*/  
}
```

### uiTabObject.postMessage(msg,wParam,lParam) <a id="uiTabObject.postMessage" href="#uiTabObject.postMessage">&#x23;</a>
投递窗口消息到消息队列中  
此函数用法请参考 ::User32.PostMessage

### uiTabObject.redraw() <a id="uiTabObject.redraw" href="#uiTabObject.redraw">&#x23;</a>
刷新

### uiTabObject.right <a id="uiTabObject.right" href="#uiTabObject.right">&#x23;</a>
右侧坐标

### uiTabObject.selIndex <a id="uiTabObject.selIndex" href="#uiTabObject.selIndex">&#x23;</a>
读取或设置当前选项索引  
起始索引为1

### uiTabObject.sendMessage(msg,wParam,lParam) <a id="uiTabObject.sendMessage" href="#uiTabObject.sendMessage">&#x23;</a>
发送窗口消息  
此函数用法请参考 ::User32.SendMessage

### uiTabObject.setFocus() <a id="uiTabObject.setFocus" href="#uiTabObject.setFocus">&#x23;</a>
设置焦点

### uiTabObject.setFont(指定字体) <a id="uiTabObject.setFont" href="#uiTabObject.setFont">&#x23;</a>
指定LOGFONT字体对象,或逻辑字体句柄

### uiTabObject.setFont(混入字体属性) <a id="uiTabObject.setFont" href="#uiTabObject.setFont">&#x23;</a>

```aardio
uiTabObject.setFont(point=10;name="宋体");
```

### uiTabObject.setItem(索引,"字符串参数") <a id="uiTabObject.setItem" href="#uiTabObject.setItem">&#x23;</a>
设置选项结构体

### uiTabObject.setItemText(索引,"字符串参数") <a id="uiTabObject.setItemText" href="#uiTabObject.setItemText">&#x23;</a>
设置选项卡标题

### uiTabObject.setParent(控件对象) <a id="uiTabObject.setParent" href="#uiTabObject.setParent">&#x23;</a>
改变父窗口

### uiTabObject.setPos(x坐标,y坐标,宽,高,插入位置,参数) <a id="uiTabObject.setPos" href="#uiTabObject.setPos">&#x23;</a>
调整窗口位置或排序,所有参数可选  
同时指定x,y坐标则移动位置  
同时指定宽高则改变大小  
指定插入位置(句柄或_HWND前缀常量)则调整Z序

### uiTabObject.setRect(rc) <a id="uiTabObject.setRect" href="#uiTabObject.setRect">&#x23;</a>
设置控件区块位置(::RECT结构体)

### uiTabObject.setRect(rc,true) <a id="uiTabObject.setRect" href="#uiTabObject.setRect">&#x23;</a>
设置控件屏幕区块位置(::RECT结构体)

### uiTabObject.setRedraw(false) <a id="uiTabObject.setRedraw" href="#uiTabObject.setRedraw">&#x23;</a>
禁止重绘

### uiTabObject.setRedraw(true) <a id="uiTabObject.setRedraw" href="#uiTabObject.setRedraw">&#x23;</a>
恢复重绘

### uiTabObject.show(true) <a id="uiTabObject.show" href="#uiTabObject.show">&#x23;</a>
显示控件

### uiTabObject.theme <a id="uiTabObject.theme" href="#uiTabObject.theme">&#x23;</a>
外观主题,例如  
winform.button.theme = "Explorer"  
winform.button.theme = false

### uiTabObject.threadCallable() <a id="uiTabObject.threadCallable" href="#uiTabObject.threadCallable">&#x23;</a>
开启此控件的跨线程调用功能

### uiTabObject.top <a id="uiTabObject.top" href="#uiTabObject.top">&#x23;</a>
顶部坐标

### uiTabObject.update() <a id="uiTabObject.update" href="#uiTabObject.update">&#x23;</a>
重绘invalidate函数指定的区块

### uiTabObject.width <a id="uiTabObject.width" href="#uiTabObject.width">&#x23;</a>
宽度

### uiTabObject.wndproc <a id="uiTabObject.wndproc" href="#uiTabObject.wndproc">&#x23;</a>

```aardio
uiTabObject.wndproc = function(hwnd,message,wParam,lParam){  
	/*窗口消息回调，返回任意非null值阻止默认回调  
wndproc重复赋值时追加函数而不是覆盖之前的回调  
设为null添除所有消息回调函数  
wndproc也可以是一个表,键要为处理的消息,值为对应的消息回调函数*/	  
}
```

## uiTabObject 事件列表 <a id="uiTabObjectEvent" href="#uiTabObjectEvent">&#x23;</a>

### uiTabObject.onDestroy <a id="uiTabObject.onDestroy" href="#uiTabObject.onDestroy">&#x23;</a>

```aardio
uiTabObject.onDestroy = function(){  
	/*窗口销毁前触发*/  
}
```

### uiTabObject.onDrawItem <a id="uiTabObject.onDrawItem" href="#uiTabObject.onDrawItem">&#x23;</a>

```aardio
uiTabObject.onDrawItem = function(drawItem){   
    if( drawItem.CtlType == 101 /*_ODT_TAB*/ ){  
        /*自绘选项卡,创建控件的参数中需要添加ownerDraw=true*/  
    } 		 	  
}
```

### uiTabObject.onSelChange <a id="uiTabObject.onSelChange" href="#uiTabObject.onSelChange">&#x23;</a>

```aardio
uiTabObject.onSelChange = function(idx,form){
	/*切换选项卡触发此事件，  
idx 为当前选项索引，数值。  
form 为当前选项页，等价于 tab 控件的 form 属性。*/
}
```

## win.ui.ctrl.tab 成员列表 <a id="win.ui.ctrl.tab" href="#win.ui.ctrl.tab">&#x23;</a>

### win.ui.ctrl.tab.TCITEM() <a id="win.ui.ctrl.tab.TCITEM" href="#win.ui.ctrl.tab.TCITEM">&#x23;</a>
选项结构体

### 自动完成常量
_TCM_FIRST=0x1300  
_TCS_BOTTOM=2  
_TCS_BUTTONS=0x100  
_TCS_FIXEDWIDTH=0x400  
_TCS_FLATBUTTONS=8  
_TCS_FOCUSNEVER=0x8000  
_TCS_FOCUSONBUTTONDOWN=0x1000  
_TCS_FORCEICONLEFT=0x10  
_TCS_FORCELABELLEFT=0x20  
_TCS_HOTTRACK=0x40  
_TCS_MULTILINE=0x200  
_TCS_MULTISELECT=4  
_TCS_OWNERDRAWFIXED=0x2000  
_TCS_RAGGEDRIGHT=0x800  
_TCS_RIGHT=2  
_TCS_RIGHTJUSTIFY=0  
_TCS_SCROLLOPPOSITE=1  
_TCS_SINGLELINE=0  
_TCS_TABS=0  
_TCS_TOOLTIPS=0x4000  
_TCS_VERTICAL=0x80  
