# 窗口和控件的样式

本页列出了一些样式和扩展样式, 可以通过方法 Gui.Opt 和 GuiControl.Opt, 和内置函数 WinSetStyle, WinSetExStyle, WinGetStyle, WinGetExStyle, ControlSetStyle, ControlSetExStyle, ControlGetStyle 和 ControlGetExStyle 来设置或检索.

## 目录

- 用于 Gui/父窗口和大多数控件类型的通用样式
- Text | Edit | UpDown | Picture
- Button | Checkbox | Radio | GroupBox
- DropDownList | ComboBox
- ListBox | ListView | TreeView
- DateTime | MonthCal
- Slider | Progress | Tab | StatusBar

## 通用样式

默认情况下, GUI 窗口使用 WS_POPUP, WS_CAPTION, WS_SYSMENU 和 WS_MINIMIZEBOX. 对于一个 GUI 窗口, WS_CLIPSIBLINGS 总是被启用而不能被禁用.

样式 | Hex | 描述
--- | --- | ---
WS_BORDER | 0x800000 | +/-Border. 创建含有薄边框的窗口.
WS_POPUP | 0x80000000 | 创建一个弹出窗口. 此样式不能和 WS_CHILD 样式一起使用.
WS_CAPTION | 0xC00000 | +/-Caption. 创建含有标题栏的窗口. 此样式是 WS_BORDER 和 WS_DLGFRAME 数值的和.
WS_CLIPSIBLINGS | 0x4000000 | 相对地剪裁子窗口; 也就是说, 当某个特定子窗口接收到 WM_PAINT 消息时, WS_CLIPSIBLINGS 样式会将所有其他重叠的子窗口从要更新的子窗口区域中剪裁出来. 如果未指定 WS_CLIPSIBLINGS 并且子窗口重叠, 则在子窗口的工作区内绘制时, 可以在相邻子窗口的工作区内绘制.
WS_DISABLED | 0x8000000 | +/-Disabled. 创建初始禁用的窗口.
WS_DLGFRAME | 0x400000 | 创建含有常用于对话框的边框样式的窗口.
WS_GROUP | 0x20000 | +/-Group. 表示此控件是一组控件中的首个. 此样式自动用于管理 "一次只能选一个" 的单选按钮的行为. 在极少见的连续添加两组单选按钮(它们之间没有其他控件类型) 的情况下, 此时可以手动应用此样式到第二个单选按钮组的首个控件中, 这样可以使此控件脱离第一个单选按钮组.
WS_HSCROLL | 0x100000 | 创建含有水平滚动条的窗口.
WS_MAXIMIZE | 0x1000000 | 创建初始为最大化的窗口.
WS_MAXIMIZEBOX | 0x10000 | +/-MaximizeBox. 创建含有最大化按钮的窗口. 不能和 WS_EX_CONTEXTHELP 样式组合使用. 必须同时指定 WS_SYSMENU 样式.
WS_MINIMIZE | 0x20000000 | 创建初始为最小化的窗口.
WS_MINIMIZEBOX | 0x20000 | +/-MinimizeBox. 创建含有最小化按钮的窗口. 不能和 WS_EX_CONTEXTHELP 样式组合使用. 必须同时指定 WS_SYSMENU 样式.
WS_OVERLAPPED | 0x0 | 创建重叠的窗口. 重叠的窗口含有标题栏和边框. 等同于 WS_TILED 样式.
WS_OVERLAPPEDWINDOW | 0xCF0000 | 创建含有 WS_OVERLAPPED, WS_CAPTION, WS_SYSMENU, WS_THICKFRAME, WS_MINIMIZEBOX 和 WS_MAXIMIZEBOX 样式的重叠窗口. 等同于 WS_TILEDWINDOW 样式.
WS_POPUPWINDOW | 0x80880000 | 创建含有 WS_BORDER, WS_POPUP 和 WS_SYSMENU 样式的弹出窗口. 必须组合使用 WS_CAPTION 和 WS_POPUPWINDOW 样式来让窗口菜单可见.
WS_SIZEBOX | 0x40000 | +/-Resize. 创建含有可调整大小的边框的窗口. 等同于 WS_THICKFRAME 样式.
WS_SYSMENU | 0x80000 | +/-SysMenu. 创建在标题栏含有窗口菜单的窗口. 必须同时指定 WS_CAPTION 样式.
WS_TABSTOP | 0x10000 | +/-Tabstop. 指定当用户按下 `Tab` 时可以接收键盘焦点的控件. 按 `Tab` 可以把键盘焦点切换到下一个拥有 WS_TABSTOP 样式的控件.
WS_THICKFRAME | 0x40000 | 创建含有可调整大小的边框的窗口. 等同于 WS_SIZEBOX 样式.
WS_VSCROLL | 0x200000 | 创建含有垂直滚动条的窗口.
WS_VISIBLE | 0x10000000 | 创建初始可见的窗口.
WS_CHILD | 0x40000000 | 创建子窗口. 拥有此样式的窗口不能含有菜单栏. 此样式不能和 WS_POPUP 样式一起使用.

## Text 控件样式

这些样式会影响到 Text 控件. 它既没有默认样式也没有强制样式.

样式 | Hex | 描述
--- | --- | ---
SS_BLACKFRAME | 0x7 | 指定带有使用窗框颜色描绘的框架的方形框. 在默认配色方案中此颜色为黑色.
SS_BLACKRECT | 0x4 | 指定使用当前窗框颜色填充的矩形. 在默认配色方案中此颜色为黑色.
SS_CENTER | 0x1 | +/-Center. 指定简单的矩形并在其中居中显示错误值文本. 控件会自动换行其中的文本, 一行末尾多出的文本显示到下一个居中行的开始处.
SS_ETCHEDFRAME | 0x12 | 使用 EDGE_ETCHED 边缘样式描绘静态控件的边框.
SS_ETCHEDHORZ | 0x10 | 使用 EDGE_ETCHED 边缘样式描绘静态控件的顶部和底部边缘.
SS_ETCHEDVERT | 0x11 | 使用 EDGE_ETCHED 边缘样式描绘静态控件的左右边缘.
SS_GRAYFRAME | 0x8 | 指定带有使用屏幕背景(桌面) 颜色描绘的框架的方形框. 在默认配色方案中此颜色为灰色.
SS_GRAYRECT | 0x5 | 指定使用当前屏幕背景颜色填充的矩形. 在默认配色方案中此颜色为灰色.
SS_LEFT | 0x0 | +/-Left. 这是默认的. 它指定简单的矩形并在其中左对齐显示文本. 显示前会格式化文本. 一行末尾多出的文本自动显示到下一个左对齐行的开始处. 超出控件宽度的文本被截去.
SS_LEFTNOWORDWRAP | 0xC | +/-Wrap. 指定矩形并在其中左对齐显示文本. 会展开 tab, 但不自动换行文本. 超出一行的文本被截去.
SS_NOPREFIX | 0x80 | 阻止控件文本中任何的和符号(&) 作为用于强调的前缀字符解释. 此样式用于当包含和符号(&) 的文件名或其他字符串需要显示在文本控件中的时候.
SS_NOTIFY | 0x100 | 当用户点击控件时发送 STN_CLICKED 通告到父窗口.
SS_RIGHT | 0x2 | +/-Right. 指定矩形并在其中右对齐显示指定的文本.
SS_SUNKEN | 0x1000 | 在静态控件周围绘制半凹陷边框.
SS_WHITEFRAME | 0x9 | 指定带有使用窗口背景颜色描绘的框架的方形框. 在默认配色方案中此颜色为白色.
SS_WHITERECT | 0x6 | 指定使用当前窗口背景颜色填充的矩形. 在默认配色方案中此颜色为白色.

## Edit 控件样式

这些样式会影响到 Edit 控件. 默认情况下, 它使用 WS_TABSTOP 和 WS_EX_CLIENTEDGE(扩展样式 E0x200). 它没有强制样式.

如果一个编辑控件由于初始内容包含多行, 高度大于 1 行或明确指定大于 1 的行数而自动检测为多行控件时, 默认将自动应用下列样式: WS_VSCROLL, ES_WANTRETURN 和 ES_AUTOVSCROLL.

如果一个编辑控件被自动检测为单行, 那么它默认含有 ES_AUTOHSCROLL.

样式 | Hex | 描述
--- | --- | ---
ES_AUTOHSCROLL | 0x80 | 对于多行编辑控件为 +/-Wrap, 而对于单行编辑控件为 +/-Limit. 当用户在行末输入字符时会自动把文本往右滚动 10 个字符. 当用户按下 `Enter` 时, 控件会把所有文本滚动回到零位置.
ES_AUTOVSCROLL | 0x40 | 当用户在最后一行按下 `Enter` 时文本向上滚动一页.
ES_CENTER | 0x1 | +/-Center. 在多行编辑控件中居中显示文本.
ES_LOWERCASE | 0x10 | +/-Lowercase. 把在编辑控件中输入的所有字符转换成小写形式.
ES_NOHIDESEL | 0x100 | 取消编辑控件的默认行为. 当控件失去输入焦点时默认会不反色显示选区, 而获得输入焦点时会反色显示选取内容. 如果指定 ES_NOHIDESEL, 即使输入焦点不在控件上选区内容也会反色显示.
ES_NUMBER | 0x2000 | +/-Number. 禁止用户输入数字外的其他内容到控件中.
ES_OEMCONVERT | 0x400 | 此样式对于包含文件名的编辑控件最有用.
ES_MULTILINE | 0x4 | +/-Multi. 指定为多行编辑控件. 默认为单行编辑控件.
ES_PASSWORD | 0x20 | +/-Password. 在编辑控件中输入的每个字符的位置显示屏蔽字符来隐藏文本.
ES_READONLY | 0x800 | +/-ReadOnly. 禁止用户输入或编辑控件中的文本.
ES_RIGHT | 0x2 | +/-Right. 在多行编辑控件中右对齐显示文本.
ES_UPPERCASE | 0x8 | +/-Uppercase. 把在编辑控件中输入的所有字符转换成大写形式.
ES_WANTRETURN | 0x1000 | +/-WantReturn. 在对话框的多行编辑控件中输入文本时, 指定当用户按下 `Enter` 时则插入回车符. 如果不指定此样式, 那么按下 `Enter` 相当于点击了对话框的默认按钮. 此样式对于单行编辑控件没有效果.

## UpDown 控件样式

这些样式会影响到 UpDown 控件. 默认情况下, 它使用 UDS_ARROWKEYS, UDS_ALIGNRIGHT, UDS_SETBUDDYINT 和 UDS_AUTOBUDDY. 它没有强制样式.

样式 | Hex | 描述
--- | --- | ---
UDS_WRAP | 0x1 | 命名选项 "Wrap". 当用户试图超出最小值或最大值时, 会让控件返回到其范围的另一端. 如果没有 Wrap, 那么到达最大值或最小值时控件会停止.
UDS_SETBUDDYINT | 0x2 | 使得当 UpDown 控件的位置改变时会设置其伙伴控件的文本(使用 WM_SETTEXT 消息). 但是, 如果其伙伴控件为 ListBox, 则改变 ListBox 的当前选区.
UDS_ALIGNRIGHT | 0x4 | 命名选项 "Right"(默认). 让 UpDown 定位在其伙伴控件的右边.
UDS_ALIGNLEFT | 0x8 | 命名选项 "Left". 让 UpDown 定位到其伙伴控件的左边.
UDS_AUTOBUDDY | 0x10 | 自动选择 z 顺序中前面的控件作为 UpDown 控件的伙伴控件.
UDS_ARROWKEYS | 0x20 | 允许用户使用键盘上的 Up 或 Down 方向键来增加或减少 UpDown 控件的位置.
UDS_HORZ | 0x40 | 命名选项 "Horz". 让控件的箭头指向左右而不是上下.
UDS_NOTHOUSANDS | 0x80 | 在伙伴控件中每三个十进制位之间不插入千位分隔符.
UDS_HOTTRACK | 0x100 | 让控件展示 "热跟踪" 行为. 即鼠标从控件按钮上经过时高亮控件按钮. 如果桌面主题覆盖了这个标志, 那么这个标志可能会被忽略.

## Picture 控件样式

这些样式会影响到 Picture 控件. 他没有默认样式. 样式 SS_ICON(图标和光标) 或 SS_BITMAP(其他图片类型) 总是被启用而不能被禁用.

样式 | Hex | 描述
--- | --- | ---
SS_REALSIZECONTROL | 0x40 | 调整位图以适应控件的大小.
SS_CENTERIMAGE | 0x200 | 让位图在控件中居中显示. 如果位图太大, 则会对其进行裁剪. 对于文本控件, 如果控件包含单行文本, 那么会在控件的可用高度内垂直居中显示文本.

## Button, CheckBox, Radio 和 GroupBox 控件样式

这些样式会影响到 Button, CheckBox, Radio 或 GroupBox 控件.

默认情况下, 除了 GroupBox 之外, 这些控件都使用 BS_MULTILINE(除非它没有显式设置宽度或高度, 或在其文本中没有任何 CR/LF 字符) 和 WS_TABSTOP(然而, 对于 Radio 控件, 每个单选按钮组中除首个外的其他单选按钮没有 WS_TABSTOP). 此外, Radio 控件具有 BS_NOTIFY, 这样可以检测到双击.

以下样式总是被启用, 不能被禁用:

- Button: BS_PUSHBUTTON 或 BS_DEFPUSHBUTTON
- CheckBox: BS_AUTOCHECKBOX 或 BS_AUTO3STATE
- Radio: BS_AUTORADIOBUTTON
- GroupBox: BS_GROUPBOX

样式 | Hex | 描述
--- | --- | ---
BS_AUTO3STATE | 0x6 | 创建一个与三态复选框相同的按钮, 但该框在用户选择时更改其状态. 状态在选中, 不确定和清除之间循环.
BS_AUTOCHECKBOX | 0x3 | 创建一个与复选框相同的按钮, 但每次用户选择复选框时, 复选框状态在选中和清除之间自动切换.
BS_AUTORADIOBUTTON | 0x9 | 创建一个与单选按钮相同的按钮, 但每次用户选中它时, 系统自动将按钮的选中状态设置为选中, 并自动将同一组中所有其他按钮的选中状态设置为清除.
BS_LEFT | 0x100 | +/-Left. 左对齐文本.
BS_PUSHBUTTON | 0x0 | 创建一个按钮, 当用户选择该按钮时, 将 WM_COMMAND 消息发布到所有者窗口.
BS_PUSHLIKE | 0x1000 | 让复选框或单选按钮的外观和行为像按钮一样. 这样按钮在没有按下或复选时是凸起的, 在按下或复选时是凹陷的.
BS_RIGHT | 0x200 | +/-Right. 右对齐文本.
BS_RIGHTBUTTON | 0x20 | +Right(即 +Right 同时包含了 BS_RIGHT 和 BS_RIGHTBUTTON, 但 -Right 仅移除 BS_RIGHT, 而不包括 BS_RIGHTBUTTON). 把复选框的方框或单选按钮的圆圈放在控件可用宽度的右边而不是左边.
BS_BOTTOM | 0x800 | 把文本放到控件可用高度的底部.
BS_CENTER | 0x300 | +/-Center. 在控件的可用宽度内水平居中显示文本.
BS_DEFPUSHBUTTON | 0x1 | +/-Default. 创建带浓黑边框的按钮. 如果按钮在对话框中, 即使输入焦点不在按钮上时, 用户可以按下 `Enter` 选择按钮. 此样式用于启用对最常用选项的快速选择.
BS_MULTILINE | 0x2000 | +/-Wrap. 如果文本过长而无法容纳在控件可用宽度的单行中时, 则对文本进行换行操作而变成多行. 此样式还允许使用换行符(`n) 在文本中开始新行.
BS_NOTIFY | 0x4000 | 启用按钮以将 BN_KILLFOCUS 和 BN_SETFOCUS 通知代码发送到其父窗口. 请注意, 无论是否具有此样式, 按钮都会发送 BN_CLICKED 通知代码. 要获取 BN_DBLCLK 通知代码, 该按钮必须具有 BS_RADIOBUTTON 或 BS_OWNERDRAW 样式.
BS_TOP | 0x400 | 把文本放到控件可用高度的顶部.
BS_VCENTER | 0xC00 | 在控件的可用高度内垂直居中显示文本.
BS_FLAT | 0x8000 | 指定按钮为二维的; 它不使用默认的底纹来创建三维效果.
BS_GROUPBOX | 0x7 | 创建一个矩形, 其中可以对其他控件进行分组. 与此样式关联的任何文本都显示在矩形的左上角.

## DropDownList 和 ComboBox 控件样式

这些样式会影响到 DropDownList 和 ComboBox 控件.

默认情况下, 这些控件都使用 WS_TABSTOP. 此外, DropDownList 控件使用 WS_VSCROLL, 而 ComboBox 控件使用 WS_VSCROLL 和 CBS_AUTOHSCROLL.

以下样式总是被启用, 不能被禁用:

- DropDownList: CBS_DROPDOWNLIST
- ComboBox: CBS_DROPDOWN 或 CBS_SIMPLE

样式 | Hex | 描述
--- | --- | ---
CBS_AUTOHSCROLL | 0x40 | +/-Limit. 当用户在行末输入时会自动滚动编辑控件中的文本到右边. 如果未设置此样式, 那么只能输入在矩形边界中能容纳的文本数量.
CBS_DISABLENOSCROLL | 0x800 | 当列表框中不包含需要滚动的足够项目时, 在其中显示被禁用的垂直滚动条. 不含有此样式时, 当列表框中没有包含足够的项目时隐藏滚动条.
CBS_DROPDOWN | 0x2 | 与 CBS_SIMPLE 类似, 只是除非用户选择编辑控件旁边的图标, 否则不会显示列表框.
CBS_DROPDOWNLIST | 0x3 | 与 CBS_DROPDOWN 类似, 不同之处在于编辑控件被静态文本项替换, 该文本项在列表框中显示当前选择.
CBS_LOWERCASE | 0x4000 | +/-Lowercase. 把输入到组合框编辑控件中的所有大写字符转换成小写.
CBS_NOINTEGRALHEIGHT | 0x400 | 让组合框准确符合创建时设置的大小. 通常, Windows CE 会调整组合框的大小使得它不会只显示部分项目.
CBS_OEMCONVERT | 0x80 | 把输入到组合框编辑控件中的文本从 Windows CE 字符集转到 OEM 字符集, 然后转回 Windows CE 字符集. 此样式最常用于包含文件名的组合框. 它仅适用于使用 CBS_DROPDOWN 样式创建的组合框.
CBS_SIMPLE | 0x1 | +/-Simple(仅 ComboBox). 总是显示列表框. 在编辑控件中显示列表框中的当前选择对象.
CBS_SORT | 0x100 | +/-Sort. 按字母顺序排列下拉列表中的项目.
CBS_UPPERCASE | 0x2000 | +/-Uppercase. 把输入到组合框编辑控件中的所有小写字符转换成大写.

## ListBox 控件样式

这些样式会影响到 ListBox 控件. 默认情况下, 它使用 WS_TABSTOP, LBS_USETABSTOPS, WS_VSCROLL 和 WS_EX_CLIENTEDGE(扩展样式 E0x200). 样式 LBS_NOTIFY(支持检测双击) 总是被启用, 不能被禁用.

样式 | Hex | 描述
--- | --- | ---
LBS_DISABLENOSCROLL | 0x1000 | 当列表框中没有包含足够项目时显示被禁用的垂直滚动条. 如果未指定此样式, 则在列表框没有包含足够项目时隐藏滚动条.
LBS_NOINTEGRALHEIGHT | 0x100 | 让列表框准确符合创建时设置的大小.
LBS_EXTENDEDSEL | 0x800 | +/-Multi. 允许通过 control-click 和 shift-click 选择多项.
LBS_MULTIPLESEL | 0x8 | 选择多项的一种简化方式, 此时不需要使用 control-click 和 shift-click, 因为普通的单击可以增加选择对象或取消选择已选择的项目.
LBS_NOSEL | 0x4000 | +/-ReadOnly. 让用户可以查看列表框中的字符串但不能进行选择.
LBS_NOTIFY | 0x1 | 每当用户单击列表框项目(LBN_SELCHANGE), 双击项目(LBN_DBLCLK), 或取消选择(LBN_SELCANCEL) 时, 列表框就会向父窗口发送通知代码.
LBS_SORT | 0x2 | +/-Sort. 按字母顺序排列列表框中的项目.
LBS_USETABSTOPS | 0x80 | 启用在描绘列表框的字符串时识别并扩展 tab 字符. 默认制表符位置为 32 个对话框单位. 一个对话框单位等于当前对话框基础宽度单位的四分之一.

## ListView 控件样式

这些样式会影响到 ListView 控件. 默认情况下, 它使用 WS_TABSTOP, LVS_REPORT, LVS_SHOWSELALWAYS, LVS_EX_FULLROWSELECT, LVS_EX_HEADERDRAGDROP 和 WS_EX_CLIENTEDGE(扩展样式 E0x200). 它没有强制样式.

样式 | Hex | 描述
--- | --- | ---
LVS_ALIGNLEFT | 0x800 | 在图标和小图标视图中左对齐项目.
LVS_ALIGNTOP | 0x0 | 在图标和小图标视图中把项目和列表视图控件的顶部对齐. 这是默认的.
LVS_AUTOARRANGE | 0x100 | 在图标和小图标视图中让图标自动保持排列.
LVS_EDITLABELS | 0x200 | +/-ReadOnly. 指定 -ReadOnly(或 +0x200) 可以让用户编辑每行首个字段.
LVS_ICON | 0x0 | +Icon. 指定大图标视图.
LVS_LIST | 0x3 | +List. 指定列表视图.
LVS_NOCOLUMNHEADER | 0x4000 | +/-Hdr. 让报告视图中不显示列标题.
LVS_NOLABELWRAP | 0x80 | 在图标视图中让项目文本显示在单行. 默认情况下, 在图标视图中项目文本可能换行.
LVS_NOSCROLL | 0x2000 | 禁用滚动. 所有的项目必须在工作区内. 此样式不兼容于 LVS_LIST 或 LVS_REPORT 样式.
LVS_NOSORTHEADER | 0x8000 | +/-NoSortHdr. 让列标题不会按钮那样. 此样式可用于不希望在报告视图中点击列标题时执行动作, 例如排序.
LVS_OWNERDATA | 0x1000 | 此样式指定虚拟列表视图控件(AutoHotkey 不直接支持).
LVS_OWNERDRAWFIXED | 0x400 | 所有者窗口可以在报告视图中描绘项目来响应 WM_DRAWITEM 消息(AutoHotkey 不直接支持).
LVS_REPORT | 0x1 | +Report. 指定报告视图.
LVS_SHAREIMAGELISTS | 0x40 | 当控件销毁时不会删除图像列表. 此样式启用了在多个列表视图控件中使用相同的图像列表.
LVS_SHOWSELALWAYS | 0x8 | 总是显示选择对象(如果有), 即使键盘焦点不在控件上.
LVS_SINGLESEL | 0x4 | +/-Multi. 每次只能选择一项. 默认情况下, 可以选择多项.
LVS_SMALLICON | 0x2 | +IconSmall. 指定小图标视图.
LVS_SORTASCENDING | 0x10 | +/-Sort. 根据首个字段的内容对行按升序排列.
LVS_SORTDESCENDING | 0x20 | +/-SortDesc. 与上面相同, 不过这里是降序排列.

扩展 ListView 样式 与 Gui 方法/属性一起使用时, 需要 LV 前缀. 某些在 Windows XP 或更高版本中引入的扩展样式未在此列出. 有关完整列表, 请参阅 MSDN: Extended List-View Styles.

扩展样式 | Hex | 描述
--- | --- | ---
LVS_EX_BORDERSELECT | LV0x8000 | 选择一个项目后, 会改变其背景颜色而不进行高亮(在最近的操作系统中可能不起作用).
LVS_EX_CHECKBOXES | LV0x4 | +/-Checked. 为每个项目显示一个复选框. 设置此样式后, 控件会使用 DrawFrameControl 创建和设置含两个图像的状态图像列表. 状态图像 1 为未选中的方框, 而状态图像 2 为选中的方框. 设置状态图像为零会移除复选框. 除了平铺视图模式外, 所有列表视图模式中的复选框是可见并具有功能的. 在平铺视图模式中点击复选框仅选择项目; 状态不会发生变化.
LVS_EX_DOUBLEBUFFER | LV0x10000 | 通过双缓冲绘图, 能减少闪烁. 此扩展样式还可以在受支持的系统上激活 alpha-混合 选取框选择.
LVS_EX_FLATSB | LV0x100 | 在列表视图中启用平坦滚动条.
LVS_EX_FULLROWSELECT | LV0x20 | 选择一行时, 高亮显示它的所有字段. 此样式只有和 LVS_REPORT 样式组合使用才有效.
LVS_EX_GRIDLINES | LV0x1 | +/-Grid. 在行和列周围显示网格线. 此样式只有和 LVS_REPORT 样式组合使用才有效.
LVS_EX_HEADERDRAGDROP | LV0x10 | 在列表视图控件中启用拖放来对列重新排序. 此样式只有在含有 LVS_REPORT 样式的列表视图控件中才有效.
LVS_EX_INFOTIP | LV0x400 | 当列表视图控件使用此样式时, 在显示项目的工具提示前会发送 LVN_GETINFOTIP 通知消息到父窗口.
LVS_EX_LABELTIP | LV0x4000 | 在任何列表视图模式中如果部分隐藏的标签没有工具提示文本, 那么列表视图控件会展开此标签. 如果未设置此样式, 那么列表视图控件只会在大图标模式中才展开部分隐藏的标签.
LVS_EX_MULTIWORKAREAS | LV0x2000 | 如果列表视图控件含有 LVS_AUTOARRANGE 样式, 只有在定义了一个或多个工作区域后才会自动排列其图标(请参阅 LVM_SETWORKAREAS). 要让此样式生效, 则必须在定义任何工作区域前并且在添加任何项目到控件前设置此样式.
LVS_EX_ONECLICKACTIVATE | LV0x40 | 当用户在项目上点击时, 列表视图控件会发送 LVN_ITEMACTIVATE 通知消息到父窗口. 此样式还启用了列表视图中的热跟踪功能. 热跟踪是指当鼠标移到项目上时, 会高亮显示此项目但不会进行选择.
LVS_EX_REGIONAL | LV0x200 | 设置列表视图窗口区域仅包含使用 SetWindowRgn 的项目图标和文本. 任何非项目部分的区域都被排除出窗口区域. 此样式只有在含有 LVS_ICON 样式的列表视图控件中才有效.
LVS_EX_SIMPLESELECT | LV0x100000 | 在图标视图中, 将项目的状态图像移动到大图标效果图的右上角. 不影响图标视图外的其他视图. 当用户使用空格键改变状态时, 会循环改变所有选定项目的状态, 而不是含有焦点的项目.
LVS_EX_SUBITEMIMAGES | LV0x2 | 让首个字段外的其他字段可以显示图像. 此样式只有和 LVS_REPORT 样式组合使用才有效.
LVS_EX_TRACKSELECT | LV0x8 | 在列表视图控件中启用热跟踪来选择对象. 热跟踪选择对象是指当鼠标悬停在某个项目上一段时间后自动选择此项目. 通过 LVM_SETHOVERTIME 消息可以改变这个延迟时间的系统默认值. 此样式适用于列表视图控件的所有视图模式. 通过调用 SystemParametersInfo 可以检查是否启用了热跟踪选择对象.
LVS_EX_TWOCLICKACTIVATE | LV0x80 | 当用户在项目上双击时, 列表视图控件会发送 LVN_ITEMACTIVATE 通知消息到父窗口. 此样式还启用了列表视图中的热跟踪功能. 热跟踪是指当鼠标移到项目上时, 会高亮显示此项目但不会进行选择.
LVS_EX_UNDERLINECOLD | LV0x1000 | 让那些可以被激活的非热项目带有下划线文本显示. 此样式要求同时设置 LVS_EX_TWOCLICKACTIVATE 样式.
LVS_EX_UNDERLINEHOT | LV0x800 | 让那些可以被激活的热项目带有下划线文本显示. 此样式要求同时设置 LVS_EX_ONECLICKACTIVATE 或 LVS_EX_TWOCLICKACTIVATE 样式.

## TreeView 控件样式

这些样式会影响到 TreeView 控件. 默认情况下, 它使用 WS_TABSTOP, TVS_SHOWSELALWAYS, TVS_HASLINES, TVS_LINESATROOT, TVS_HASBUTTONS 和 WS_EX_CLIENTEDGE(扩展样式 E0x200). 它没有强制样式.

样式 | Hex | 描述
--- | --- | ---
TVS_CHECKBOXES | 0x100 | +/-Checked. 在每个项目旁显示一个复选框.
TVS_DISABLEDRAGDROP | 0x10 | 阻止树形视图控件发送 TVN_BEGINDRAG 通知消息.
TVS_EDITLABELS | 0x8 | +/-ReadOnly. 允许用户编辑树形视图项目的名称.
TVS_FULLROWSELECT | 0x1000 | 启用树形视图中的全行选择功能. 会高亮显示被选择项目所在的行, 且点击行中的任意位置都会选择此项目. 此样式不能和 TVS_HASLINES 样式组合使用.
TVS_HASBUTTONS | 0x1 | +/-Buttons. 在父项目旁显示加号(+) 和减号(-) 按钮. 用户点击此按钮可以展开或折叠父项目的子项列表. 要在树形视图的根项目中包含按钮, 必须同时指定 TVS_LINESATROOT.
TVS_HASLINES | 0x2 | +/-Lines. 使用线显示项目的层次结构.
TVS_INFOTIP | 0x800 | 通过发送 TVN_GETINFOTIP 通知获取工具提示信息.
TVS_LINESATROOT | 0x4 | +/-Lines. 使用线连接树形视图控件的根项目. 如果没有同时指定 TVS_HASLINES, 那么此样式被忽略.
TVS_NOHSCROLL | 0x8000 | +/-HScroll. 禁用控件中的水平滚动. 控件中将不显示水平滚动条.
TVS_NONEVENHEIGHT | 0x4000 | 通过 TVM_SETITEMHEIGHT 消息设置项目的高度为奇数的高度. 默认情况下, 项目的高度必须为偶数值.
TVS_NOSCROLL | 0x2000 | 同时禁用控件中的水平滚动和垂直滚动. 控件中不会显示任何滚动条.
TVS_NOTOOLTIPS | 0x80 | 禁用工具提示.
TVS_RTLREADING | 0x40 | 让文本从右到左(RTL) 显示. 通常窗口按从左到右(LTR) 的顺序显示文本.
TVS_SHOWSELALWAYS | 0x20 | 在视图控件失去焦点时让选择的项目仍保持选择的.
TVS_SINGLEEXPAND | 0x400 | 在树形控件中选择后展开所选项目并折叠取消选择的项目. 如果用户在选择项目时按住了 `Ctrl`, 那么不会折叠被取消选择的项目.
TVS_TRACKSELECT | 0x200 | 在树形视图控件中启用鼠标的热跟踪功能.

## DateTime 控件样式

这些样式会影响到 DateTime 控件. 默认情况下, 它使用 DTS_SHORTDATECENTURYFORMAT 和 WS_TABSTOP. 它没有强制样式.

样式 | Hex | 描述
--- | --- | ---
DTS_UPDOWN | 0x1 | 在控件右边提供 up-down 控件来修改日期和时间的值, 这会替换其他的可用下拉月历.
DTS_SHOWNONE | 0x2 | 在控件中显示复选框, 取消选中此复选框可以让控件不选择日期/时间. 每当控件中没有日期/时间时, Gui.Submit 和 GuiCtrl.Value 将获取到空值(空字符串).
DTS_SHORTDATEFORMAT | 0x0 | 显示短格式的日期. 在某些区域设置中, 它看起来像 6/1/05 或 6/1/2005. 在较旧的操作系统中, 可能显示两位数的年份. 这是 DTS_SHORTDATECENTURYFORMAT 而不是 DTS_SHORTDATEFORMAT 为默认样式的原因.
DTS_LONGDATEFORMAT | 0x4 | 格式选项 "LongDate". 显示长格式的日期. 在某些区域设置中, 它看起来像 Wednesday, June 01, 2005.
DTS_SHORTDATECENTURYFORMAT | 0xC | 格式选项为空/省略. 用短格式显示带四位年份的日期. 在某些区域设置中, 它看起来像 6/1/2005. 如果系统中 Comctl32.dll 的版本低于 5.8, 那么不支持此样式并自动使用 DTS_SHORTDATEFORMAT 代替.
DTS_TIMEFORMAT | 0x9 | 格式选项 "Time". 仅显示时间, 它在某些区域设置中看起来像 5:31:42 PM.
DTS_APPCANPARSE | 0x10 | 尚未支持. 可以让拥有者分析用户输入并执行必要的动作. 它让用户在按下 `F2` 后可以对控件的工作区进行编辑. 当用户结束时控件会发送 DTN_USERSTRING 通知消息.
DTS_RIGHTALIGN | 0x20 | +/-Right. 让日历在控件的右边拉下而不是左边.

## MonthCal 控件样式

这些样式会影响到 MonthCal 控件. 默认情况下, 它使用 WS_TABSTOP. 它没有强制样式.

样式 | Hex | 描述
--- | --- | ---
MCS_DAYSTATE | 0x1 | 让控件发送 MCN_GETDAYSTATE 通知来请求哪些日子应以粗体显示的信息. [尚未支持]
MCS_MULTISELECT | 0x2 | 命名选项 "Multi". 允许用户选择日期范围而不限制为单个日期. 默认情况下, 最大的范围为 366 天, 此设置可以通过给控件发送 MCM_SETMAXSELCOUNT 消息改变. 例如:
    SendMessage 0x1004, 7, 0, "SysMonthCal321", MyGui ; 7 天. 0x1004 为 MCM_SETMAXSELCOUNT.
MCS_WEEKNUMBERS | 0x4 | 在每行日子的左边显示周数(1-52). Week 1 被定义为至少包含四天的第一周.
MCS_NOTODAYCIRCLE | 0x8 | 禁止控件中当前日期的往复循环.
MCS_NOTODAY | 0x10 | 禁止在控件的底部显示今天的日期.

## Slider 控件样式

这些样式会影响到 Slider 控件. 默认情况下, 它使用 WS_TABSTOP. 它没有强制样式.

样式 | Hex | 描述
--- | --- | ---
TBS_VERT | 0x2 | +/-Vertical. 控件是垂直导向的.
TBS_LEFT | 0x4 | +/-Left. 在控件的顶部显示刻度线(如果含有 TBS_VERT 样式则在其左边). 等同于 TBS_TOP.
TBS_TOP | 0x4 | 等同于 TBS_LEFT.
TBS_BOTH | 0x8 | +/-Center. 在控件的两边显示刻度线. 与 TBS_HORZ 一起使用时为顶部和底部, 而与 TBS_VERT 一起时则为左右两边.
TBS_AUTOTICKS | 0x1 | 在控件值范围的每个增量处显示刻度线. 使用 +/-TickInterval 可以更灵活.
TBS_ENABLESELRANGE | 0x20 | 让控件仅显示选择范围. 在选择范围起始位置和结束位置的刻度线显示为三角形(而不是垂直的短划线), 且高亮选择范围(可能需要使用 `GuiObj.Opt("-Theme")` 移除主题才能高亮). 要设置选择范围, 请参照此例, 这里设置起始位置为 55 而结束位置为 66:
    SendMessage 0x040B, 1, 55, "msctls_trackbar321", WinTitle
    SendMessage 0x040C, 1, 66, "msctls_trackbar321", WinTitle
TBS_FIXEDLENGTH | 0x40 | +/-Thick. 允许改变滑块的大小.
TBS_NOTHUMB | 0x80 | 让控件不显示可移动的滑块.
TBS_NOTICKS | 0x10 | +/-NoTicks. 让控件不显示任何刻度线.
TBS_TOOLTIPS | 0x100 | +/-ToolTip. 让控件支持工具提示. 使用此样式创建控件时, 它会自动创建默认的工具提示控件用来显示滑动条当前的位置. 您可以使用 TBM_SETTIPSIDE 消息改变工具提示的位置.
TBS_REVERSED | 0x200 | 很遗憾, 此样式不会影响控件的实际行为, 所以使用它是毫无意义的(相反, 在控件的选项中使用 +Invert 来反转它的效果). 根据操作系统版本, 此样式可能需要 Internet Explorer 5.0 或更高版本.
TBS_DOWNISLEFT | 0x400 | 很遗憾, 此样式不会影响控件的实际行为, 所以使用它是毫无意义的. 根据操作系统版本, 此样式可能需要 Internet Explorer 5.01 或更高版本.

## Progress 控件样式

这些样式会影响到 Progress 控件. 默认情况下, 它使用 PBS_SMOOTH. 它没有强制样式.

样式 | Hex | 描述
--- | --- | ---
PBS_SMOOTH | 0x1 | +/-Smooth. 进度条使用平滑滚动条而不是默认分段的条来显示进度状态. 含有此样式时, 在 Windows XP 或更高版本中控件会自动恢复到经典主题外观.
PBS_VERTICAL | 0x4 | +/-Vertical. 进度条垂直地显示进度状态, 从底部到顶部.
PBS_MARQUEE | 0x8 | 进度条会像大盖帽一样移动; 即每次移动时条会沿着其可用长度向前滑动直到碰到另一端. 含有此样式的条没有明确的位置. 相反, 每次试图改变位置时进度条将移动一格. 此样式常用来指示一个正在进行的完成时间未知的操作.

## Tab 控件样式

这些样式会影响到 Tab 控件. 默认情况下, 它使用 WS_TABSTOP 和 TCS_MULTILINE. 样式 WS_CLIPSIBLINGS 总是被启用而不能被禁用, 而 TCS_OWNERDRAWFIXED 则根据控件的背景颜色和/或文本颜色的要求强制开启或关闭.

样式 | Hex | 描述
--- | --- | ---
TCS_SCROLLOPPOSITE | 0x1 | 选择一个选项卡时, 不需要的选项卡不会滚动到控件的另一边.
TCS_BOTTOM | 0x2 | +/-Bottom. 选项卡显示在控件的底部而不是顶部.
TCS_RIGHT | 0x2 | 选项卡垂直显示在使用 TCS_VERTICAL 样式控件的右边.
TCS_MULTISELECT | 0x4 | 按住 `Ctrl` 时进行点击可以选择多个选项卡. 此样式必须和 TCS_BUTTONS 样式一起使用.
TCS_FLATBUTTONS | 0x8 | 选择的选项卡显示为缩进到背景中, 而其他选项卡和背景显示在同一平面上. 此样式只影响含 TCS_BUTTONS 样式的选项卡控件.
TCS_FORCEICONLEFT | 0x10 | 让图标和每个固定宽度选项卡的左边缘对齐. 此样式只能和 TCS_FIXEDWIDTH 样式一起使用.
TCS_FORCELABELLEFT | 0x20 | 让标签和每个固定宽度选项卡的左边缘对齐; 即标签紧跟在图标右边显示而不居中显示. 此样式只能和 TCS_FIXEDWIDTH 样式一起使用, 同时它隐含了 TCS_FORCEICONLEFT 样式.
TCS_HOTTRACK | 0x40 | 让指针下的项目自动高亮显示.
TCS_VERTICAL | 0x80 | +/-Left 或 +/-Right. 选项卡显示在控件的左边, 且选项卡文本垂直显示. 此样式仅在和 TCS_MULTILINE 样式一起使用时才有效. 要让选项卡显示在控件的右边, 请同时使用 TCS_RIGHT 样式. 当自定义背景颜色或文本颜色有效时, 此样式将无法正确显示选项卡. 为了解决此问题, 请在选项卡控件的选项中指定 -Background 和/或 cDefault.
TCS_BUTTONS | 0x100 | +/-Buttons. 让选项卡显示为按钮, 且不在显示区域周围描绘边框.
TCS_SINGLELINE | 0x0 | +/-Wrap. 让所有选项卡显示在一行中. 必要时用户可以滚动来查看到更多的选项卡. 此样式是默认的.
TCS_MULTILINE | 0x200 | +/-Wrap. 必要时让选项卡显示在多行中, 这样可以同时看到所有的选项卡.
TCS_RIGHTJUSTIFY | 0x0 | 这是默认的. 必要时增加每个选项卡的宽度, 这样每行的选项卡会充满选项卡控件的全部宽度. 只有同时使用 TCS_MULTILINE 样式时此窗口样式才有效.
TCS_FIXEDWIDTH | 0x400 | 让所有选项卡使用相同的宽度. 此样式不能和 TCS_RIGHTJUSTIFY 样式一起组合使用.
TCS_RAGGEDRIGHT | 0x800 | 不会拉伸每行的选项卡来充满控件的全部宽度. 此样式是默认的.
TCS_FOCUSONBUTTONDOWN | 0x1000 | 点击时选项卡控件会获取输入焦点.
TCS_OWNERDRAWFIXED | 0x2000 | 父窗口负责描绘选项卡.
TCS_TOOLTIPS | 0x4000 | 选项卡控件有与其关联的工具提示控件.
TCS_FOCUSNEVER | 0x8000 | 点击时选项卡控件不获取输入焦点.

## StatusBar 控件样式

这些样式会影响到 StatusBar 控件. 默认情况下, 它使用 SBARS_TOOLTIPS 和 SBARS_SIZEGRIP(后者只有在窗口可调整大小的情况下才会出现). 它没有强制样式.

样式 | Hex | 描述
--- | --- | ---
SBARS_TOOLTIPS | 0x800 | 当鼠标悬停在状态栏部分上时显示工具提示: 1) 文本过多以致无法完全显示; 或 2) 含有图标但没有文本. 工具提示的文本可以使用下面的方法设置:
    SendMessage 0x410, 0, "Text to display", "msctls_statusbar321", MyGui
上面的粗体 0 是从零开始的状态栏部分的编号. 要使用首个外的其他部分, 对第二个指定 1, 对第三个指定 2, 等等. 注意: 在某些操作系统版本中可能永远不会显示工具提示.
SBARS_SIZEGRIP | 0x100 | 在状态栏的右端包含一个大小调整手柄. 大小调整手柄类似于大小调整边框; 它是一个矩形区域, 用户可以点击并拖动它来调整父窗口的大小.

dftg