组合框把一个编辑框和一个单选择列表框结合在了一起.用户既可以在编辑框中输入,也可以从列表框中选择一个列表项来完成输入。组合框分为简易式(Simple combo box)、下拉式(Drop-down combo box)和下拉列表式(Drop-down list box)三种.简易式组合框包含一个编辑框和一个总是显示的列表框。下拉式组合框同简易式组合框类似,二者的区别在于仅当单击下滚箭头后列表框才会弹出。下拉列表式组合框也有一个下拉的列表框,但它的编辑框是只读的,不能输入字符。
应用程序用CreateWindowEx创建组合框控件时,可根据控件的用途在下表中选择部份常数来设定其风格属性(style)。
常数 | 说明 |
CBS_AUTOHSCROLL | 允许在编辑框中输入超过控件宽度的文字。 |
CBS_DISABLENOSCROLL | 固定显示垂直滚动条。未指定本项时,当列表未超出窗口,垂直滚动条自动隐藏。 |
CBS_DROPDOWN | 指定控件为下拉式列表框,允许在编辑框中输入文字。 |
CBS_DROPDOWNLIST | 指定控件为下拉列表式,不允许在编辑框中输入文字。 |
CBS_HASSTRINGS | 指定控件为含有字符串的自绘式组合框。应用程序在自绘式组合框的列表框中进行自绘时可以用CB_GETLBTEXT消息来取得列表项的文本。 |
CBS_LOWERCASE | 使所有列表项的文本全部变成小写。 |
CBS_NOINTEGRALHEIGHT | 组合框的尺寸由应用程序而不是Windows指定.通常,由Windows指定尺寸会使列表项的某些部分隐藏起来 |
CBS_OEMCONVERT | 使编辑框组件中的正文可以在ANSI字符集和OEM字符集之间相互转换。这在编辑框中包含文件名时是很有用的。 |
CBS_OWNERDRAWFIXED | 指定自绘式组合框,即由父窗口负责绘制列表框的内容,并且列表项有相同的高度。在控件被创建时父窗口将收到WM_MEASUREITEM 消息,当需要重绘时父窗口将收到 WM_DRAWITEM 消息。 |
CBS_OWNERDRAWVARIABLE | 指定自绘式组合框,并且列表项有不同的高度。在控件被创建时父窗口将收到WM_MEASUREITEM 消息,当需要重绘时父窗口将收到 WM_DRAWITEM 消息。 |
CBS_SIMPLE | 指定控件为简易式组合框,其列表框不会自动隐藏,允许在编辑框中输入文字。 |
CBS_SORT | 使插入列表框中的项按字母升序排列。 |
CBS_UPPERCASE | 使所有列表项的文本全部变成大写。 |
应用程序可以通过调用SendMessage向控件发送如下消息来设定和查询控件各种参数。
uMsg | wParam | lParam | 说明 |
CB_ADDSTRING | 0 | 字符串地址 | 追加一个列表项。如果指定了CBS_SORT风格,表项将被重排序,否则将被追加在列表框的最后一项。 |
CB_DELETESTRING | 索引 | 0 | 删除指定的列表项, |
CB_DIR | DDL_ARCHIVE | 指向通配符地址 | 在列表框中列出文件名,必须是当前路径内,符合指定通配符,存档属性的文件名。 |
DDL_DIRECTORY | 在列表框中列出当前路径的子文件夹。子文件夹名前后将加上一对方括号"[*]" |
DDL_DRIVES | 在列表框中列出本机的所有驱动器名。驱动器名前后将加上一对方括号和减号"[-*-]" |
DDL_EXCLUSIVE | 只列出指定属性的文件名,默认情况下是所有可读写文件都列出。如果没有指定任何文件属性,则不列出文件名。 |
DDL_HIDDEN | 列出隐藏属性的文件名。 |
DDL_READONLY | 列出只读属性的文件名。 |
DDL_READWRITE | 列出读写属性的文件名。 |
DDL_SYSTEM | 列出系统属性的文件名。 |
CB_FINDSTRING | 起点索引 | 字符串地址 | 根据给定的字符串前辍查找匹配字符串,忽略大小写,从指定起点开始开始查找,当查到某表项的文本字符串的前面包括指定的字符串则结束查找,返回索引号,若找不到则转到列表框第一项继续查找,直到查完所有表项,如果wParam为-1则从列表框第一项开始查找,若还找不到则返回CB_ERR。如:表项字符串为"abc123"和指定字串"ABC"就算匹配。 |
CB_FINDSTRINGEXACT | 开始表项序号 | 字符串地址 | 查找字符串,忽略大小写,与CB_FINDSTRING不同,本操作必须整个字符串相同。如果找到则返回表项序号,否则返回CB_ERR。 |
CB_GETCOUNT | 0 | 0 | 返回列表项的总项数,若出错则返回CB_ERR. |
CB_GETCURSEL | 0 | 0 | 返回当前被选择项的索引,如果没有列表项被选择或有错误发生,则函数返回CB_ERR. |
CB_GETDROPPEDCONTROLRECT | 0 | RECT结构地址 | 取组合框中列表框的屏幕位置。 |
CB_GETDROPPEDSTATE | 0 | 0 | 取组合框中列表框是否可见,返回TRUE可见,FALSE隐藏。 |
CB_GETDROPPEDWIDTH | 0 | 0 | 取组合框中列表框的宽度(像素点)。 |
CB_GETEDITSEL | 起点缓冲地址 或NULL | 终点缓冲地址 或NULL | 取得组合框中编辑控件中选定内容的范围,返回值中低16位为起点与高16位为终点,如果wParam和lParam中指定了地址,则会在该地址填入相应值(dword)。 |
CB_GETEXTENDEDUI | 0 | 0 | 返回组合框是否存在扩展界面,如果存在则返回TRUE否则FALSE。扩展界面详见CB_SETEXTENDEDUI |
CB_GETHORIZONTALEXTENT | 0 | 0 | 返回组合框水平滚动的总宽度(像素点)。本操作只适用于带有水平滚动风格的组合框。 |
CB_GETITEMDATA | 索引 | 0 | 每个列表项都有一个32位的附加数据.本操作返回指定列表项的附加数据。若出错则返回CB_ERR. |
CB_GETITEMHEIGHT | 索引 | 0 | 返回指定列表项的高度(像素点)。 |
CB_GETLBTEXT | 索引 | 缓冲区 | 用于获取指定列表项的字符串。参数lParam指向一个接收字符串的缓冲区。wParam则指定了接收字符串的列表项索引。返回获得的字符串的长度,若出错,则返回CB_ERR。 |
CB_GETLBTEXTLEN | 索引 | 0 | 返回指定列表项的字符串的字节长度(未包括结尾的0)。wParam指定了列表项的索引.若出错则返回CB_ERR。 |
CB_GETLOCALE | 0 | 0 | 取列表项当前用于排序的语言代码,当用户使用CB_ADDSTRING向组合框中的列表框中添加记录并使用CBS_SORT风格进行重新排序时,必须使用该语言代码。返回值中高16位为国家代码。 |
CB_GETTOPINDEX | 0 | 0 | 取组合框中列表框中第一个可见项的索引,若出错则返回CB_ERR. |
CB_INITSTORAGE | 表项数 | 内存字节数 | 本操作只适用于Windows95版本,当你将要向列表框中加入很多表项或有很大的表项时,本操作将预先分配一块内存,以免在今后的操作中一次一次地分配内存,从而加快程序运行速度。 |
CB_INSERTSTRING | 索引 | 字符串地址 | 在列表框中的指定位置插入字符串。wParam指定了列表项的索引,如果为-1,则字符串将被添加到列表的末尾。lParam指向要插入的字符串。本操作返回实际的插入位置,若发生错误,会返回LB_ERR或LB_ERRSPACE。与CB_ADDSTRING不同,本操作不会导致CBS_SORT风格的列表框重新排序。建议不要在具有CBS_SORT风格的列表框中使用本操作,以免破坏列表项的次序。 |
CB_LIMITTEXT | 最大值 | 0 | 限制组合框中编辑控件文本的最大长度 |
CB_RESETCONTENT | 0 | 0 | 清除所有列表项。 |
CB_SELECTSTRING | 开始表项序号 | 字符串地址 | 设定与指定字符串相匹配的列表项为选中项。本操作会滚动列表框以使选择项可见。参数的意义及搜索的方法与CB_FINDSTRING类似。如果找到了匹配的项,返回该项的索引,如果没有匹配的项,返回CB_ERR并且当前的选中项不被改变。 |
CB_SETCURSEL | 索引 | 0 | 设置指定的列表项为当前选择项。本操作会滚动列表框以使选择项可见。参数wParam指定了列表项的索引,若为-1,将清除列表框中的选择。若出错函数返回CB_ERR。 |
CB_SETDROPPEDWIDTH | 宽度(点) | 0 | 设定组合框中的列表框的最大允许宽度。 |
CB_SETEDITSEL | 0 | 范围 | 设置制组合框中编辑控件中文本选定内容范围,该范围被高亮度显示,用于为复制、替换、粘贴、剪切、删除等编辑功能指定范围。lParam的高16位为起点低16位为终点。 |
CB_SETEXTENDEDUI | TRUE或FALSE | 0 | 指定下拉式或下拉列表式组合框是使用默认界面或扩展界面。wParam为FALSE时使用默认界面:用“F4”键切换下拉列表框的打开和关闭而用向下方向键改变选择项。wParam为TRUE时使用扩展界面:禁止使用“F4”而使用向下方向键来打开下拉列表框。 |
CB_SETHORIZONTALEXTENT | 宽度(点) | 0 | 设定组合框中的列表框的宽度。 |
CB_SETITEMDATA | 索引 | 数据值 | 更新组合框中列表框指定列表项的32位附加数据。 |
CB_SETITEMHEIGHT | 索引 | 高度(点) | 指定组合框中列表项显示高度,带有CBS_OWNERDRAWVARIABLE(自绘列表项)风格的控件,只设置由wParam指定项的高度,其它风格将更新所有的列表项的高度。 |
CB_SETLOCALE | 语言代码 | 0 | 设置列表项当前用于排序的语言代码,当用户使用CB_ADDSTRING向组合框中的列表框中添加记录并使用CBS_SORT风格进行重新排序时,必须使用该语言代码。返回值中高16位为国家代码。 |
CB_SETTOPINDEX | 索引 | 0 | 用来将指定的列表项设置为列表框的第一个可见项,该函数会将列表框滚动到合适的位置。wParam指定了列表项的索引.若操作成功,返回0值,否则返回CB_ERR。 |
CB_SHOWDROPDOWN | TRUE或FALSE | 0 | 本操作用本显示或关闭下拉式和下拉列表式组合框的列表框,wParam为TRUE时为显示,FALSE时关闭。 |
uMsg | wParam | lParam | 说明 |
WM_COMPAREITEM | ---- | ---- | ---- |
WM_DRAWITEM | ---- | ---- | ---- |
WM_MEASUREITEM | ---- | ---- | ---- |
当用户在组合框上进行各种操作时,其父窗口将收到WM_COMMAND通知消息,同时wParam的低16位带控件的ID。lParam带控件句柄(hWnd),wParam的高16位带有如下表的消息代码。
消息代码 | 说明 |
CBN_CLOSEUP | 下拉的列表框将关闭。 |
CBN_DBLCLK | 简易式组合框的列表项被双击。 |
CBN_DROPDOWN | 下拉的列表框将打开。 |
CBN_EDITCHANGE | 组合框的编辑控件文本被更改。本消息是在文本被显示后发出的。 |
CBN_EDITUPDATE | 组合框的编辑控件文本被更改。本消息是在文本被显示前发出的。 |
CBN_ERRSPACE | 没有申请到足够内存空间。 |
CBN_KILLFOCUS | 组合框失去键盘输入焦点。 |
CBN_SELCHANGE | 改变当前选择项。 |
CBN_SELENDCANCEL | 用户取消当前的选择。当用户在列表框中选择了一项,然后又在组合框控件外单击鼠标时就会导致该消息的发送。 |
CBN_SELENDOK | 用户确认了自己所作的选择。当用户在列表框中选择了一项,然后按了回车键或单击了下滚箭头时就会发送该消息。 |
CBN_SETFOCUS | 组合框获得了键盘输入焦点。 |
ComboBox样式
WS_POPUP - 弹出式窗口(不能与WS_CHILDWINDOW样式同时使用)
WS_CHILDWINDOW - 子窗口(不能与WS_POPUP合用)
WS_MINIMIZE - 最小化状态
WS_VISIBLE - 可见状态
WS_DISABLED - 不可用状态
WS_CLIPSIBLINGS - 使窗口排除子窗口之间的相对区域
WS_CLIPCHILDREN - 当在父窗口内绘图时,排除子窗口区域
WS_MAXIMIZE - 具有最大化按钮,须指定WS_SYSTEM样式
WS_CAPTION - 有标题框和边框(和WS_TILED样式相同)
WS_BORDER - 有单边框
WS_DLGFRAME - 带对话框边框样式,不带标题框
WS_VSCROLL - 有垂直滚动条
WS_HSCROLL - 有水平滚动条
WS_SYSMENU - 标题框上带有窗口菜单(须指定WS_CAPTION样式)
WS_THICKFRAME - 有可调边框(与WS_SIZEBOX样式相同)
WS_GROUP - 组样式,每个组的第一个控件具有WS_TABSTOP样式
WS_TABSTOP - 可接受TAB键焦点
WS_MINIMIZEBOX - 有最小化按钮
WS_MAXIMIZEBOX - 有最大化按钮
WS_OVERLAPPEDWINDOW - 具有层叠,标题框,系统菜单,可调边框,系统按钮
WS_POPUPWINDOW - 具有单边框,弹出式,系统菜单样式
*/
/* 窗口扩展样式参考列表:
WS_EX_DLGMODALFRAME - 带双层边框
WS_EX_NOPARENTNOTIFY - 创建/销毁时不通知父窗口
WS_EX_TOPMOST - 窗口置顶(停留在所有非最高层窗口的上面)
WS_EX_ACCEPTFILES - 可接受文件拖放
WS_EX_TRANSPARENT - 透明样式,在同属窗口已重画时该窗口才可重画
WS_EX_MDICHILD - MDI子窗口样式
WS_EX_TOOLWINDOW - 工具条窗口样式
WS_EX_WINDOWEDGE - 带凸起边缘的边框
WS_EX_CLIENTEDGE - 带阴影的边缘
WS_EX_CONTEXTHELP - 有上下文帮助样式,标题栏包含一个问号标志
WS_EX_RIGHT - 右对齐
WS_EX_RTLREADING - 窗口文本从右到左显示
WS_EX_LEFTSCROLLBAR - 垂直滚动条在窗口左边界
WS_EX_CONTROLPARENT - 允许用户使用TAB键在窗口的子窗口间搜索
WS_EX_STATICEDGE - 当窗口为不可用状态时创建一个三维边缘
WS_EX_APPWINDOW - 当窗口可见时将一个顶层窗口放置在任务栏上
WS_EX_OVERLAPPEDWINDOW - 带凸起边缘的边框,边缘有阴影
WS_EX_PALETTEWINDOW - 带立体边框,有工具条窗口样式,窗口在顶层
WS_EX_LAYERED - 分层或透明窗口,该样式可使用混合特效
WS_EX_NOINHERITLAYOUT - 子控件不继承窗体或控件的布局
WS_EX_LAYOUTRTL - 窗体或控件将具有从右向左的布局(因而会被镜像)
WS_EX_COMPOSITED - 用双缓冲从下到上绘制窗口的所有子孙(WinXP以上)
WS_EX_NOACTIVATE - 处于顶层但不激活
*/
/* 控件样式参考列表:
CBS_SIMPLE - 不显示下拉按钮,总是显示列表框
CBS_DROPDOWN - 类似CBS_SIMPLE,只是在未点击下拉按钮以前不显示下拉列表
CBS_DROPDOWNLIST - 类似CBS_DROPDOWN,但不可以更改文本内容
CBS_OWNERDRAWFIXED - 允许自画,但行高一致
CBS_OWNERDRAWVARIABLE - 允许自画,行高可以不一致
CBS_AUTOHSCROLL - 自动滚动文本
CBS_OEMCONVERT - 允许OEM字符集转换
CBS_SORT - 自动按字母排序
CBS_HASSTRINGS - 指定自画样式的ComboBox包含的项目由字符串组成
CBS_NOINTEGRALHEIGHT - 组合框的大小可以不是项目大小的整数倍
CBS_DISABLENOSCROLL - 总是显示垂直滚动条
CBS_UPPERCASE - 全部大写
CBS_LOWERCASE - 全部小写