前言:
子窗口控件是特殊的子窗口,不需要我们注册窗口类,系统已经注册好了,我们只需要在创建时选择相应的窗口类名。常用的子窗口控件有按钮BUTTON、组合框COMBOBOX、编辑框EDIT、列表框LISTBOX、静态框STATIC、滚动条SCROLLBAR等类型。消息为WM_COMMAND/WM_CTLCOLORBTN
- 启用/禁用窗口: EnableWindow
- 设置指定窗口的显示状态: ShowWindow
- 指定的窗口设置键盘焦点: SetFocus

一、按钮(BUTTON)
窗口类名:"button"
1. 按钮样式
| 风格 | 说明 | 风格 | 说明 |
|---|---|---|---|
| BS_PUSHBUTTON | 下压式按钮 | BS_DEFPUSHBUTTON | 下默认普通按钮,具有较黑的边框 |
| BS_CHECKBOX L | 复选框 | BS_AUTOCHECKBOX | 复选框,自动维护状态 |
| BS_RADIOBUTTON | 圆形单选按钮 | BS_AUTORADIOBUTTON | 单选框,自动维护状态 |
| BS_3STATE | 三态复选按钮,选中,未选中,未定 | BS_AUTO3STATE | 检查框,按钮的状态会自动改变 |
| BS_GROUPBOX | 分组框 | BS_OWNERDRAW | 可创建一个拥有者自绘按钮 |
| BS_LEFTTEXT | 左对齐文字 |
注意:
1.灰色是向使用者表示此框不能被选本章的或者禁止使用。
2.单选按钮是互斥的,只能选择其中一项;而复选框没有限制,可以选择一项或多项。
3.单选按钮一般是分组的,一组单选按钮之间是互斥的,只能选择其中一个。一个窗口可以包含多组单选按钮。(通过WS_GROOUP进行分组,在创建按钮时,加入WS_GROOUP的按钮为组长,后面接着的都为此组,知道下一个WS_GROOUP出现)。
4.单选按钮的父窗口为分组框控件 hGroupSex,而不是顶级窗口 hWnd。
2. 按钮消息:WM_COMMAND
消息参数: wParam 和 lParam
| 值 | 说明 |
|---|---|
| LOWORD(wParam) | 按钮的ID |
| HIWORD(wParam) | 通知码BN_ |
| (HWND)lParam | 子窗口按钮句柄 |
3. 补充
1.创建单选按钮:
button1=CreateWindow(TEXT("button"), TEXT("男"), WS_GROUP|WS_CHILD | >WS_VISIBLE|BS_AUTORADIOBUTTON,350,150,50,20,hwnd, (HMENU)1, ((LPCREATESTRUCT)lParam)->hInstance, NULL);2.创建一个位图按钮:
HBITMAP bmp = (HBITMAP)LoadBitmap(((LPCREATESTRUCT)lParam)->hInstance, MAKEINTRESOURCEW(IDB_BITMAP5)); button2=CreateWindow(TEXT("button"), NULL, WS_CHILD | WS_VISIBLE|BS_BITMAP,300, 300, 240,120,hwnd, (HMENU)2, ((LPCREATESTRUCT)lParam)->hInstance, NULL); SendMessage(button2, BM_SETIMAGE, IMAGE_BITMAP, (LPARAM)bmp);3.修改按钮文本:
SetWindowText(button1,TEXT("设置文本为:自由自在!"));4.隐藏按钮、显示按钮、禁用按钮、启用按钮:
ShowWindow(button,SW_HIDE); // 隐藏按钮 ShowWindow(button,SW_SHOW); // 显示按钮 EnableWindow(button,TRUE); // 启用按钮 EnableWindow(button,FALSE); // 禁用按钮5.设置焦点:
SetFocus(hwnd);
二、静态框(STATIC)
主要用于显示文本、图片。
窗口类名:"static"
1.静态框种类
| 值 | 说明 | 值 | 说明 |
|---|---|---|---|
| SS_CENTER | 字符居中显示 | SS_LEFT | 字符左对齐 |
| SS_LEFTNOWORADWRAP | 字符左对齐,超过末尾字符被裁剪 | SS_BLACKRECT | 用窗口边框色填充的矩形 |
| SS_BLSCKFRAME | 矩形边框,与窗口边框同色 | SS_GRAYRECT | 用屏幕背景色填充的矩行 |
| SS_GRAYFRAME | 矩形边框,使用屏幕背景色 | SS_WHITERECT | 用窗口背景色填充的矩行 |
| SS_RIGHT | 字符右对齐 | SS_WHITEFRAME | 矩形边框,使用窗口背景色 |
静态框不发送消息
2.补充
1.创建文本静态框:
static1=CreateWindow(TEXT("static"), TEXT("性别:"), WS_CHILD|WS_VISIBLE,300,150,50,20,hwnd, (HMENU)12, ((LPCREATESTRUCT)lParam)->hInstance, NULL);2.创建位图静态框:
HBITMAP bmp = (HBITMAP)LoadBitmap(((LPCREATESTRUCT)lParam)->hInstance, MAKEINTRESOURCEW(IDB_BITMAP5)); static2=CreateWindow(TEXT("static"), NULL, WS_CHILD|WS_VISIBLE|SS_BITMAP,300,150,50,20,hwnd, (HMENU)13, ((LPCREATESTRUCT)lParam)->hInstance, NULL); SendMessage(static2, STM_SETIMAGE , IMAGE_BITMAP, (LPARAM)bmp);3.修改静态框文本:
SetWindowText(static1,TEXT("设置文本为:自由自在!"));4.隐藏静态框、显示静态框、禁用静态框、启用静态框:
ShowWindow(static1,SW_HIDE); // 隐藏静态框 ShowWindow(static1,SW_SHOW); // 显示静态框 EnableWindow(static1,TRUE); // 启用静态框 EnableWindow(static1,FALSE); // 禁用静态框
三、编辑框(EDIT)
窗口类别:"edit"
1.窗口风格
| 值 | 说明 | 值 | 说明 |
|---|---|---|---|
| ES_LEFT | 左对齐 | ES_CENTER | 居中 |
| ES_RIGHT | 右对齐 | ES_MULTILINE | 多行 |
| ES_UPPERCASE | 把用户输入的字母统统转换成大写字母 | ES_LOWERCASE | 把用户输入的字母统统转换成小写字母 |
| ES_PASSWORD | 显示密码 | ES_AUTOVSCROLL | 垂直自滚 |
| ES_AUTOHSCROLL | 水平自滚 | ES_NOHIDESEL | 当编辑失去焦点时隐藏对字符的选定,重新获得焦点后以反色显示选中内容 |
| ES_OEMCONVERT | 将ANSI字符转化为OEM字符 | ES_READONLY | 只读 |
| ES_WANTRETURN | 使多行编辑器接收回车键输入并换行 | ES_NUMBER | 只能显示数字 |
ES_WANTRETURN使多行编辑器接收回车键输入并换行如果不指定该风格,按回车键会选择缺省的命令按钮,这往往会导致对话框的关闭。
2. 编辑框消息:WM_COMMAND
消息参数: wParam 和 lParam
| 值 | 说明 |
|---|---|
| LOWORD(wParam) | 按钮的ID |
| HIWORD(wParam) | 通知码BN_ |
| (HWND)lParam | 子窗口按钮句柄 |

3. 补充
1.创建编辑框控件
CreateWindow(TEXT("edit"), TEXT("请输入文本:"), WS_CHILD|WS_VISIBLE| ES_MULTILINE,0,0,100,500,hwnd, (HMENU)0, ((LPCREATESTRUCT)lParam)->hInstance, NULL);2.获得行数
y=SendMessage(hwndedit,EM_ GETLINECOUNT,0,0); // 获得行数3.获取输入框的数据
GetWindowText(hwndedit, szUsername, 100); // 获取输入框的数据
四、其他控件样式
旋转按钮控件
| 值 | 说明 |
|---|---|
| UDS_HORZ | 指定一个水平旋转按钮.若不指定该风格则创建一个垂直的旋转按钮. |
| UDS_WRAP | 当旋转按钮增大到超过最大值时,自动重置为最小值,当减小至低于最小值时,自动重置为最大值. |
| UDS_ARROWKEYS | 当用户按下向下或向上箭头键时,旋转按钮值递增或递减. |
| UDS_SETBUDDYINT | 旋转按钮将自动更新伙伴控件中显示的数值,如果伙伴控件能接受输入,则可在伙伴控件中输入新的旋转按钮值. |
| UDS_NOTHOUSANDS | 伙伴控件中显示的数值每隔三位没有千位分隔符. |
| UDS_AUTOBUDDY | 自动使旋转按钮拥有一个伙伴控件. |
| UDS_ALIGNRIGHT | 旋转按钮在伙伴控件的右侧. |
| UDS_ALIGNLEFT | 旋转按钮在伙伴控件的左侧. |
轨道条控件
| 值 | 说明 |
|---|---|
| TBS_HORZ | 指定一个水平轨道条.该风格是默认的. |
| TBS_VERT | 指定一个垂直轨道条. |
| TBS_AUTOTICKS | 在范围设定后,自动为轨道条加上刻度. |
| TBS_NOTICKS | 轨道条无刻度. |
| TBS_BOTTOM | 在水平轨道条的底部显示刻度,可与TBS_TOP一起使用. |
| TBS_TOP | 在水平轨道条的顶部显示刻度,可与TBS_BOTTOM一起使用. |
| TBS_RIGHT | 在垂直轨道条的右侧显示刻度,可与TBS_LEFT一起使用. |
| TBS_LEFT | 在垂直轨道条的左侧显示刻度,可与TBS_RIGHT一起使用. |
| TBS_BOTH | 在轨道条的上下部或左右两侧都显示刻度. |
| TBS_ENABLESELRANGE | 在轨道条中显示一个选择范围. |
列表框风格
| 值 | 说明 |
|---|---|
| LBS_STANDARD | 创建一个具有边界和垂直滚动条、当选择发生变化或条目被双击时能够通知父窗口的标准列表框。所有条目按字母排序。 |
| LBS_SORT | 按字母排序。 |
| LBS_NOSEL | 条目可视但不可选。 |
| LBS_NOTIFY | 当用户选择或双击一个串时,发出消息通知父窗口。 |
| LBS_DISABLENOSCROLL | 在条目不多时依然显示并不起作用的滚动条。 |
| LBS_MULTIPLESEL | |
| LBS_EXTENDEDSEL | 可用SHIFT和鼠标或指定键组合来选择多个条目。 |
| LBS_MULTICOLUMN | 允许多列显示。 |
| LBS_OWNERDRAWVARIABLE | 创建一个拥有者画列表框,条目高度可以不同。 |
| LBS_OWNERDRAWFIXED | 创建一个具有相同条目高度的拥有者画列表框。 |
| LBS_USETABSTOPS | 允许使用TAB制表符。 |
| LBS_NOREDRAW | 当条目被增删后不自动更新列表显示。 |
| LBS_HASSTRINGS | 记忆了添加到列表中的字串。 |
| LBS_WANTKEYBOARDINPUT | 当有键按下时向父窗口发送WM_VKEYTOITEM或WM_CHARTOITEM消息。 |
| LBS_NOINTEGRALHEIGHT | 按程序设定尺寸创建列表框。 |
组合框风格
| 值 | 说明 |
|---|---|
| CBS_AUTOHSCROLL | 当在行尾输入字符时自动将编辑框中的文字向右滚动。 |
| CBS_DROPDOWN | 同CBS_SIMPLE风格类似,只是只有在用户点击下拉图标时才会显示出下拉列表。 |
| CBS_DROPDOWNLIST | 同CBS_DROPDOWN类似,只是显示当前选项的编辑框为一静态框所代替。 |
| CBS_HASSTRINGS | 创建一个包含了由字串组成的项目的拥有者画组合框。 |
| CBS_OEMCONVERT | 将组合框中的ANSI字串转化为OEM字符。 |
| CBS_OWNERDRAWFIXED | 由下拉列表框的拥有者负责对内容的绘制;列表框中各项目高度相同。 |
| CBS_OWNERDRAWVARIABLE | 由下拉列表框的拥有者负责对内容的绘制;列表框中各项目高度可以不同。 |
| CBS_SIMPLE | 下拉列表始终显示。 |
| CBS_SORT | 自动对下拉列表中的项目进行排序。 |
| CBS_DISABLENOSCROLL | 当下拉列表显示内容过少时显示垂直滚动条。 |
| CBS_NOINTEGRALHEIGHT | 在创建控件时以指定的大小来精确设定组合框尺寸。 |
树形视图控件
| 值 | 说明 |
|---|---|
| TVS_HASLINES | 在父项与子项间连线以清楚地显示结构. |
| TVS_LINESATROOT | 只在根部画线. |
| TVS_HASBUTTONS | 显示带有"+"或"-"的小方框来表示某项能否被展开或已展开. |
| TVS_EDITLABELS | 用户可以编辑表项的标题. |
| TVS_SHOWSELALWAYS | 即使控件失去输入焦点,仍显示出项的选择状态. |
| TVS_DISABLEDRAGDROP | 不支持拖动操作. |
列表视图控件
| 值 | 说明 |
|---|---|
| LVS_ALIGNLEFT | 当显示格式是大图标或小图标时,标题放在图标的左边.缺省情况下标题放在图标的下面. |
| LVS_ALIGNTOP | 当显示格式是大图标或小图标时,标题放在图标的上边. |
| LVS_AUTOARRANGE | 当显示格式是大图标或小图标时,自动排列控件中的表项. |
| LVS_EDITLABELS | 用户可以修改标题. |
| LVS_ICON | 指定大图标显示格式. |
| LVS_LIST | 指定列表显示格式. |
| LVS_NOCOLUMNHEADER | 在报告格式中不显示列的表头. |
| LVS_NOLABELWRAP | 当显示格式是大图标时,使标题单行显示.缺省时是多行显示. |
| LVS_NOSCROLL | 列表视图无滚动条. |
| LVS_NOSORTHEADER | 报告列表视图的表头不能作为排序按钮使用. |
| LVS_OWNERDRAWFIXED | 由控件的拥有者负责绘制表项. |
| LVS_REPORT | 指定报告 显示格式. |
| LVS_SHAREIMAGELISTS | 使列表视图共享图像序列. |
| LVS_SHOWSELALWAYS | 即使控件失去输入焦点,仍显示出项的选择状态. |
| LVS_SINGLESEL | 指定一个单选择列表视图.缺省时可以多项选择. |
| LVS_SMALLICON | 指定小图标显示格式. |
| LVS_SORTASCENDING | 按升序排列表项. |
| LVS_SORTDESCENDING | 按降序排列表项. |
控件样式参考列表
| 值 | 说明 |
|---|---|
| DS_ABSALIGN | 对话框的坐标为屏幕坐标(缺省为客户区坐标) |
| DS_SYSMODAL | 系统模式(仅支持16位程序),不能与DS_CONTROL同用 |
| DS_LOCALEDIT | 在对话框内部为编辑框分配内存(仅支持16位程序) |
| DS_SETFONT | 可定制对话框字体 |
| DS_MODALFRAME | 框架样式(不能与WS_CAPTION同用) |
| DS_NOIDLEMSG | 无空闲消息 |
| DS_SETFOREGROUND | 使对话框在最前面显示 |
| DS_3DLOOK | 四周有3维边框 |
| DS_FIXEDSYS | 使用系统固定字体 |
| DS_NOFAILCREATE | 忽略创建过程中的错误 |
| DS_CONTROL | 控件模式,可作为其他对话框的子窗口 |
| DS_CENTER | 在屏幕居中 |
| DS_CENTERMOUSE | 在鼠标位置居中 |
| DS_CONTEXTHELP | 有上下文帮助按钮 |