创建一个标签控件(TabControl)
#Include <GuiTab.au3>
_GUICtrlTab_Create($hWnd, $iX, $iY[, $iWidth=150[, $iHeight=150[, $iStyle=0x00000040[, $iExStyle=0x00000000]]]])
$hWnd | 父窗口或者所有者窗口 |
$iX | 控件水平坐标 |
$iY | 控件垂直坐标 |
$iWidth | [可选参数] 控件宽度 |
$iHeight | [可选参数] 控件高度 |
$iStyle | [可选参数] 控件样式: $TCS_BOTTOM - 标签显示在控件底部 $TCS_BUTTONS - 标签显示为按钮,绘制区域周围没有边界 $TCS_FIXEDWIDTH - 所有标签的宽度相等 $TCS_FLATBUTTONS - 标签选中时显示为凹下,而其它未选标签处于同一平面. 必须与 $TCS_BUTTONS 样式共同使用才能达到此效果. $TCS_FOCUSNEVER - 点击时控件不接收输入焦点 $TCS_FOCUSONBUTTONDOWN - 点击时控件接收输入焦点 $TCS_FORCEICONLEFT - 图标与固定宽度的标签左对齐 需与 $TCS_FIXEDWIDTH 样式配合使用. $TCS_FORCELABELLEFT - 文本与固定宽度的标签左对齐, 标显示在中心, 图标显示在中心而不右边 需与 $TCS_FIXEDWIDTH 样式配合使用, 且隐含有 $TCS_FORCEICONLEFT 样式效果. $TCS_HOTTRACK - 指针下的项自动高亮, 通过调用 SystemParametersInfo,可以检查是否启用热跟踪. $TCS_MULTILINE - 显示多行标签,如有需要,所有标签立即可见 $TCS_MULTISELECT - 按住 Ctrl 键时单击可以选择多个标签. 必须与 $TCS_BUTTONS 样式配合使用. $TCS_OWNERDRAWFIXED - 父窗口负责绘制标签 $TCS_RAGGEDRIGHT - 标签行将不会拉伸以填补控件的整个宽度.这是默认样式. $TCS_RIGHT - 标签垂直显示在使用 $TCS_VERTICAL 样式的控件右侧 此样式等同于 $TCS_BOTTOM. 这种样式不支持使用视觉样式. $TCS_RIGHTJUSTIFY - 标签宽度将拉伸以填补控件的整个宽度 必须与 $TCS_MULTILINE 样式配合使用,否则该样式将被忽略. $TCS_SCROLLOPPOSITE - 当一个标签被选中时,不需要的标签滚动到控件另一侧 $TCS_SINGLELINE - 只显示一个标签行, 如有必要,通过滚动可以看到更多的标签.这是默认样式. $TCS_TABS - 制表符显示为标签,并在周围绘制显示边框.这是默认样式. $TCS_TOOLTIPS - 标签具有与其关联的工具提示控件 $TCS_VERTICAL - 标签显示在控件左侧,标签文本垂直显示 必须与 $TCS_MULTILINE 样式配合使用. 要使标签出现在控件右侧, 请使用 $TCS_RIGHT 样式. [可选参数] 默认 : $TCS_HOTTRACK 强制 : $WS_CHILD, $WS_CLIPSIBLINGS, $WS_VISIBLE |
$iExStyle | [可选参数] 控件扩展样式: $TCS_EX_FLATSEPARATORS - 控件标签项目之间将绘制分隔符 $TCS_EX_REGISTERDROP - 当一个对象被拖到标签项目, 控件生成 $TCN_GETOBJECT 通知消息,以请求放置目标对象. |
成功: | 返回控件句柄 |
失败: | 0 |
#include <GUIConstantsEx.au3>
#include <GuiTab.au3>
#include <WindowsConstants.au3>
$Debug_TAB = False ; 检查传递给函数的类名, 设置为True并输出到一个控件的句柄,用于检查它是否工作
Global $hTab
_Main()
Func _Main()
Local $hGUI
; 创建 GUI
$hGUI = GUICreate("(UDF Created) Tab Control Create", 400, 300)
$hTab = _GUICtrlTab_Create($hGUI, 2, 2, 396, 296)
GUISetState()
GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
; 添加标签
_GUICtrlTab_InsertItem($hTab, 0, "Tab 1")
_GUICtrlTab_InsertItem($hTab, 1, "Tab 2")
_GUICtrlTab_InsertItem($hTab, 2, "Tab 3")
; 循环直到用户退出
Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE
GUIDelete()
EndFunc ;==>_Main
Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
#forceref $hWnd, $iMsg, $iwParam
Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $hWndTab
$hWndTab = $hTab
If Not IsHWnd($hTab) Then $hWndTab = GUICtrlGetHandle($hTab)
$tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
$hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
$iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
$iCode = DllStructGetData($tNMHDR, "Code")
Switch $hWndFrom
Case $hWndTab
Switch $iCode
Case $NM_CLICK ; 用户在控件中点击了鼠标左键
_DebugPrint("$NM_CLICK" & @LF & "--> hWndFrom:" & @TAB & $hWndFrom & @LF & _
"-->IDFrom:" & @TAB & $iIDFrom & @LF & _
"-->Code:" & @TAB & $iCode)
; 标签控件忽略此返回值
Case $NM_DBLCLK ; 用户在控件中双击了鼠标左键
_DebugPrint("$NM_DBLCLK" & @LF & "--> hWndFrom:" & @TAB & $hWndFrom & @LF & _
"-->IDFrom:" & @TAB & $iIDFrom & @LF & _
"-->Code:" & @TAB & $iCode)
;~ Return 1 ; 非零值以不允许进行默认处理
Return 0 ; 零则允许进行默认处理
Case $NM_RCLICK ; 用户在控件中点击了鼠标右键
_DebugPrint("$NM_RCLICK" & @LF & "--> hWndFrom:" & @TAB & $hWndFrom & @LF & _
"-->IDFrom:" & @TAB & $iIDFrom & @LF & _
"-->Code:" & @TAB & $iCode)
;~ Return 1 ; 非零值以不允许进行默认处理
Return 0 ; 零则允许进行默认处理
Case $NM_RDBLCLK ; 用户在控件中点击了鼠标右键
_DebugPrint("$NM_RDBLCLK" & @LF & "--> hWndFrom:" & @TAB & $hWndFrom & @LF & _
"-->IDFrom:" & @TAB & $iIDFrom & @LF & _
"-->Code:" & @TAB & $iCode)
;~ Return 1 ; 非零值以不允许进行默认处理
Return 0 ; 零则允许进行默认处理
Case $NM_RELEASEDCAPTURE ; 控件正释放鼠标捕获
_DebugPrint("$NM_RELEASEDCAPTURE" & @LF & "--> hWndFrom:" & @TAB & $hWndFrom & @LF & _
"-->IDFrom:" & @TAB & $iIDFrom & @LF & _
"-->Code:" & @TAB & $iCode)
; 没有返回值
EndSwitch
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_NOTIFY
Func _DebugPrint($s_text, $line = @ScriptLineNumber)
ConsoleWrite( _
"!===========================================================" & @LF & _
"+======================================================" & @LF & _
"-->Line(" & StringFormat("%04d", $line) & "):" & @TAB & $s_text & @LF & _
"+======================================================" & @LF)
EndFunc ;==>_DebugPrint