Windows 各种控件使用心得
Windows 各种控件使用心得
管理控件函数:
ShowWindow()
MoveWindow()
CreateWindow()
CreateWindowEx()
系统预定义的窗口类:
BUTTON 按钮控件
COMBOBOX 组合框控件
EDIT 编辑框控件
LISTBOX 列表框控件
SCROLLBAR 滚动条控件
STATIC 静态控件
子窗口控件通过向其父窗口发送WM_COMMAND消息进行通讯。WM_COMMAND的wParam参数包含了子窗口的标志ID,而lParam参数的低位是子窗口的句柄,高位是通知代码,通知代码将告诉父窗口用户在子窗口中所进行的操作。
《子窗口控件和相应的通知代码》
按钮控件 BN_CLICKED 用户在按钮子窗口中单击
BN_DOUBLECLICKED 用户在按钮子窗口中双击
BN_SETFOCUS 按钮获得输入焦点
BN_KILLFOCUS 按钮失去输入焦点
编辑框控件 EN_CHANGE 用户在编辑框子窗口中更改了输入框中的数据
EN_ERRSPACE 编辑框的空间已用完
EN_HSCROLL 水平滚动条被按下并被激活
EN_KILLFOCUS 编辑框失去输入焦点
EN_MAXTEXT 输入的正文数超过了编辑框的最大容量
EN_SETFOCUS 编辑框子窗口获得输入焦点
EN_UPDATE 编辑框子窗口将更新显示内容
EN_VSCROLL 垂直滚动条被按下并激活
列表框控件 LBN_DBLCLK 字符串列表框中的字符串被双击
LBN_ERRSPACE 分配给字符串列表框的内存已经用完
LBN_KILLFOCUS 字符串列表框失去焦点
LBN_SELCHANGE 在字符串列表框进行的选择发生了改变
LBN_SETFOCUS 字符串列表框获得输入焦点
组合框控件 CBN_DBLCLK 选择列表框中的字符串被双击
CBN_OROPDOWN 选择列表框将被取消
CBN_EDITCHANGE 选择列表框中的正文将被修改
CBN_EDITUPDATE 选择列表框中的正文将被更新
CBN_ERRSPACE 分配给选择列表框的内存已用完
CBN_KILLFOCUS 选择列表框失去输入焦点
CBN_SELCHANGE 选择列表框中的选择项发生改变
CBN_SETFOCUS 选择列表框获得输入焦点
滚动条控件 没有与滚动条相关的通知代码
静态控件 没有与静态文本框相关的通知代码
应用程序窗口可调用函数SendMessage()向特定的子窗口发送消息,以指示其动作。
例如用户单击单选按钮时,应用程序窗口可调用函数SendMessage()向该单选按钮
发送BM_SETCHECK消息,为该按钮设置选中符号,其形式为:
SendMessage(hwndRadioButton,BM_SETCHECK,1,0);
使用对话框控件时,应用程序可调用函数SendDlgItemMessage向指定的对话框控件
发送消息,其形式为:
SendDlgItemMessage(hDlg,ID,message,wParam,lParam);
其中message为所发的消息,应用程序向控件发送的消息的字参数与长参数包含该
消息的相关信息,其含义取决于具体的控件消息。
常用子窗口控件操作函数
1、EnableWindow函数
用户通过该函数,可以激活或禁止窗口,函数的原型如下:
BOOL EnableWindow(HWND hwnd,BOOL bEnable);
其中,bEnable为激活或禁止标识,当bEnable值为True时该窗口可接收用户输入;
bEnable值为False时禁止该窗口接收输入。
2、MoveWindow函数
利用该函数可以移动窗口或改变窗口的大小,函数的原型如下:
BOOL MoveWindow(HWND hwnd,
int X,
int Y,
int nWidth,
int nHeight,
BOOL bReprint); // 表明窗口移动后是否重画
bReprint表明窗口移动后是否重画,如果父窗口的位置或大小改变,子窗口相对于
父窗口的位置与大小不变。
3、SetWindowText函数
利用该函数可以设置窗口的标题或文本,函数的原型如下:
BOOL SetWindowText(HWND hwnd,LPCTSTR lpszString);
其中lpszString为设置的文本内容。
4、GetWindowText函数
利用该函数可以获取指定窗口标题或文本,该函数返回从指定窗口获取的文本字节
数,函数的原型如下:
int GetWindowText(HWND hwnd,
LPSTR lpszString, // 存放文本字符串的缓冲区
int nMax); // 最大可获取的字符串长度
另外,对于对话框按钮控件,应用程序可调用函数SetDlgItemText和GetDlgItemText
完成相同操作。
SetDlgItemText函数原型为:
BOOL SetDlgItemText( HWND hDlg, // 对话框句柄
int ID,
LPCTSTR lpszString); // 设置的文本内容
GetDlgItemText函数的原型如下:
int GetDlgItemText( HWND hDlg, // 对话框句柄
int ID,
LPSTR lpszString, // 存放文本字符串的缓冲区
int nMax); // 最大可获取的字符串长度
该函数返回从指定的控件获取的文本字节数
5、DestroyWindow函数
该函数可以关闭窗口,如果应用程序关闭父窗口,则其中的子窗口同时被关闭,
函数的原型如下:
BOOL DestroyWindow(HWND hwnd);
按钮控件与应用程序之间的消息传递
1、接收按钮控件消息
在用户与控件交互时,控件向其父窗口发送WM_COMMAND消息,该消息的wParam参数
的低字节中包含控件的标识值(ID),高字节中包含控件向父窗口发出的通知代码。
2、向按钮控件发送消息
应用程序可调用函数SendMessage向按钮控件发送消息,对其进行操作,其形式如下:
SendMessage(hwnd,message,wParam,lParam);
message为向控件子窗口发出的消息,常用消息及其说明如下:
按钮消息及其说明
消息名 说明
BM_GETCHECK 返回单选按钮或复选框的选中状态
BM_SETCHECK 设置单选按钮或复选框的选中状态
BM_GETSTATE 返回按钮或复选框的样式
BM_SETSTYLE 设置按钮或复选框的样式
BM_SETSTATE 设置按钮或复选框的状态
BM_GETIMAGE 返回按钮图标或位图句柄
BM_SETIMAGE 设置按钮图标或位图句柄
SendMessage函数使用字参数确定同种消息中的不同动作,例如:
设置复选框和单选按钮的选中标志时字参数应取1,其形式为:
SendMessage(hwnd,BM_SETCHECK,1,0);
取消选中标志时字参数应取0,其形式为:
SendMessage(hwnd,BM_SETCHECK,0,0);
对于对话框按钮控件,应用程序可调用函数SendDlgItemMessage完成相同操作。
滚动条控件
应用程序创建滚动条控件后,即可通过该控件发出的消息得知用户对滚动条
的操作,并可调用API函数操作指定的滚动条。当用户操作窗口滚动条滚动
窗口时,滚动条应用程序发出WM_VSCROLL或WM_HSCROLL消息。消息中的字参数
(wParam)低字节中包含了滚动条动作的标识,常用的标识及其说明如下:
常用滚动条动作标识及其说明
标识
SB_TOP 滚动到滚动条顶端或最右端
SB_BOTTOM 滚动到滚动条底端或最左端
SB_RIGHT 滚动到右边
SB_LEFT 滚动到左边
SB_PAGEUP 向上滚动一页
SB_PAGEDOWN 向下滚动一页
SB_PAGELEFT 向左滚动一页
SB_PAGERIGHT 向右滚动一页
SB_LINEDOWN 向下滚动一行
SB_LINEUP 向上滚动一行
SB_LINELEFT 向左滚动一行
SB_LINERIGHT 向右滚动一行
SB_THUMBPOSITION 滚动框移动到新位置
SB_THUMBTRACK 滚动框被拖动
SB_ENDSCROLL 滚动到最终位置
其中比较特殊的是SB_THUMBPOSITION标识和SB_THUMBTRACK标识,当滚动条发出
这两条消息时,消息的字参数高字节中包含了滚动条的位置。
作为子窗口控件的滚动条,其消息发送与按钮等其他空间有所不同。滚动条控件
并不发出WM_COMMAND消息,而是与窗口滚动条一样,发送WM_VSCROLL,或WM_HSCROLL
消息。
两者的区别在于消息的长参数(lParam)所包含的内容不同。滚动条控件消息的
长参数的高字节中包含控件句柄,而窗口滚动条消息的长参数高字节则为0。
此外,可应用API函数操作滚动条控件,例如设置滚动块位置等。
常用滚动条操作函数
1、SetScrollRange函数
该函数的功能是设置滚动条的滚动范围,函数原型如下:
int SetScrollRange
(
HWND hwnd, // 窗口句柄
int nBar, // 滚动条特性标识
int nMaxPos, // 滚动条最大滚动位置
int nMinPos, // 滚动条最小滚动位置
BOOL bRedraw // 当滚动条改变时,是否重绘标志,非0表示重绘
);
值得提出的是:窗口句柄对应于不同的对象,它对应着响应的窗口句柄,如对于窗口
滚动条为窗口句柄;对于独立滚动条子窗口为该子窗口句柄;对于对话框控件为对话
框句柄。
常用滚动条特性标识及其说明
标识 说明
SB_CTL 表示该滚动条为控件滚动条
SB_HORZ 表示该滚动条为窗口水平滚动条
SB_VERT 表示该滚动条为窗口垂直滚动条
滚动条的滚动位置为一组离散值,例如设置滚动条的滚动范围为0~99,则该滚动条
共有100个可能的位置。
2、SetScrollPos函数
利用该函数可以设置滚动块的位置,函数的原型如下:
int SetScrollPos
(
HWND hwnd, // 窗口句柄
int nBar, // 滚动条的特性标识,同SetScrollRange函数
int nPos, // 滚动块的位置,其取值应在滚动条滚动范围之内
BOOL bRedraw // 意义同SetScrollRange函数
);
3、GetSystemMetrics函数
应用程序常使用GetSystemMetrics函数获取系统提供的滚动条尺寸,其形式有两种:
获取系统水平滚动条的高度:GetSystemMetrics(SM_CYHSCROLL)
获取系统垂直滚动条的宽度:GetSystemMetrics(SM_CXVSCROLL)
4、GetScrollPos函数
利用该函数可以获取滚动块的位置,函数的原型如下:
int GetScrollPos
(
HWND hwnd, // 窗口句柄
int nBar // 滚动条特性标识
);
函数返回当前滚动块的位置。
5、GetScrollRange函数
利用该函数可以获取滚动条的滚动范围,函数的原型如下:
BOOL GetScrollRange
(
HWND hwnd, // 窗口句柄
int nBar, // 滚动条特性标识
LPINT lpMinPos, // 接收最小位置的整形变量的地址
LPINT lpMaxPos // 接收最大位置的整形变量的地址
);
静态控件消息的发送
一般情况下静态控件不发送消息。但在实际应用中,长需要静态文本能够像超文本
那样相应用户的输入,向应用程序发送控件消息。这时应用程序需在创建静态控件
时加入SS_NOTIFY样式。该样式允许静态控件向其父窗口发送WM_COMMAND消息,该
消息的字参数(wParam)的低字节中包含静态控件的ID,高字节中包含通知码,
长参数lParam中包含该静态控件的句柄。
静态控件使用的通知码及其说明
通知码 说明
STN_CLICKED 单击静态控件
STN_DBLCLK 双击静态控件
STN_ENABLE 激活静态控件
STN_DISABLE 禁止静态控件
列表框控件与应用程序之间的消息传递
1、列表框向应用程序发送消息
当用户与列表框交互时,列表框向应用程序发出WM_COMMAND消息。
该消息字参数(wParam)的高字节为标志列表框动作的消息通知码(如LBN_DBLCLK标识用户双击);
低字节为控件标识值。应用程序中常用的列表框通知码及其说明如下:
通知码 说明
LBN_SELCHANGE 表明列表框中的用户选择已发生改变
LBN_DBCLK 双击
LBN_SELCHANGE 列表框中的选择被取消
LBN_SETFOCUS 列表框收到输入焦点
LBN_KILLFOCUS 列表框失去输入焦点
2、应用程序向列表框发送消息
应用程序对列表框的操作通过调用函数SendMessage或SendDlgItemMessage向其发送
各种消息完成。常用列表框消息及其说明如下:
消息 说明
LB_ADDFILE 在文件表中加入指定文件
LB_ADDSTRING 在列表框中加入列表项
LB_DELETESTRING 在列表框中删除列表项
LB_DIR 在列表框中列出指定文件
LB_FINDSTRING 在列表框中查找指定项
LB_GETCOUNT 获取多选列表框中的项数
LB_GETCURSEL 获取列表框中当前选中项的索引值
LB_GETSEL 获取列表框中指定项的选中状态
LB_GETSELCOUNT 获取多选列表框中选中的项数
LB_GETTEXT 获取指定项文本
LB_GETTEXTLEN 获取指定项长高
LB_GETTOPINDEX 获取列表框中第一项的索引值
LB_INSERTSTRING 在列表框的指定位置加入一项
LB_RESETCONTENT 清空列表框
LB_SETSEL 设置多选列表框中指定项的选中状态
LB_SETCURSEL 设置单选列表框中指定项的选中状态
LB_SETTOPINDEX 设置列表框中第一项的索引值
应用程序向列表框发送消息时应注意下列问题
(1)索引号的使用
1 应用程序通过列表框中项的索引值操作指定项,其中第一项的默认值索引号为0,
最后一项的索引号为-1.例如,在列表框的第3个位置插入向德语句为:
SendMessage(hwndlist,LB_INSERTSTRING,2,(LPARAM)szNewItem);
2 应用程序常通过向列表框发送LB_GETCURSEL消息获取当前选中的索引号,形式为:
nIndex=SendMessage(hwndlist,LB_GETCURSEL,0,0);
(2)多选列表框信息发送
当应用程序设置列表框的样式为LBS_EXETNDEDSEL和LBS_MULTIPLSEL时,用户可在
该列表框中选取多个项。当用户选择列表框中的多个项时,应用程序可通过向列表框
发送LB_GETSELCOUNT消息获取选中的项数,其形式为:
nCount=SendMessage(hwndlist,LB_GETSELCOUNT,0,0L);
其中nCount为返回选中项数。
此外,应用程序还可向列表框发送LB_GETSEL消息获取指定项的选中状态,其形式为:
nSelect=SendMessage(hwndlist,LB_GETSEL,nIndex,0L);
其中nSelect为返回该项的选中状态。若为非0则表明索引号为nIndex的列表项被选中
(3)发送LB_DIR消息
列表框常见的用法是显示一系列文件名、目录或驱动器,这一功能由应用程序向列表框
发出LB_DIR消息实现。该消息的字参数(wParam)表示文件属性值,长参数(lParam)
表示所列文件的特征。常用的形式为:
nFileNum=SendMessage(hwndlist,LB_DIR,FILE_LIST,(LPARAM)"*.exe");
其中:
nFileNum:函数返回列表框中指定文件的数目;
hwndlist:列表框句柄;
FILE_LIST:表示所列文件属性值的wParam参数,系统规定的文件属性值及其说明如下:
数值 说明
4000 列出驱动器名
0000 列出普通文件名
0001 列出只读文件名
0002 列出隐藏文件名
0004 列出系统文件名
0010 列出上述文件及子目录名
1、编辑框向应用程序发送消息
与列表框相似,编辑框通过向其父窗口发送WM_COMMAND消息通知应用程序用户
的交互信息。该消息字参数(wParam)的低字节为控件标识;高字节为标识列表框
动作的消息通知码。
编辑框常用通知码及其说明
通知码 说明
EN_SETFOCUS 编辑框获取输入焦点
EN_KILLFOCUS 编辑框失去输入焦点
EN_CHANGE 编辑框的内容发生改变
EN_UPDATE 编辑框的内容被更新
EN_MAXTEXT 编辑框中的用户输入已达到允许的最大字节数
EN_HSCROLL 编辑框中的内容水平滚动
EN_VSCROLL 编辑框中的内容垂直滚动
2、应用程序向编辑框发送消息
应用程序对编辑框的操作通过调用函数SendMessage或SendDlgItemMessage向其
发送各种消息完成。
常用编辑框消息及其说明
消息 说明
EM_GETRECT 获取编辑框矩形的尺寸
EM_SETRECT 设置编辑框矩形的尺寸
EM_LINESCROLL 设置滚动条滚动的步长
EM_SETHANDLE 设置输入内容缓冲区句柄
EM_GETHANDLE 获取输入内容缓冲区句柄
EM_LINELENGTH 获取文本行长度
EM_GETFONT 获取编辑框使用的字体
EM_GETLINECOUNT 获取多行编辑框的文本行数
EM_REPLACESEL 替换编辑框中的选中文本
EM_SETPASSWORDCHAR 设置密码编辑框中的替代字符
EM_GETPASSWORDCHAR 获取密码编辑框中的替代字符
EM_SETREADONLY 设置编辑框为只读
EM_GETSEL 获取编辑框中的选中文本
EM_SETSEL 设置编辑框中的选中文本
1、组合框向应用程序发送消息
组合框通过向其发窗口发送WM_COMMAND消息通知应用程序用户的交互信息。
该消息字参数(wParam)的低字节为控件标识,高字节为标识组合框动作的消息通知码。
组合框常用通知码及其说明
通知码 说明
CBN_SELCHANGE 组合框中列表框部分所选中项发生改变
CBN_DBLCLK 双击
CBN_SETFOCUS 组合框获得输入焦点
CBN_KILLFOCUS 组合框失去输入焦点
CBN_EDITCHANGE 组合框中的编辑框中的文本发生改变
CBN_EDITUPDATE 组合框中的编辑框将显示修改过的文本
CBN_DROPDOWN 组合框中的列表框将下拉
CBN_CLOSEUP 组合框中的列表框将隐藏
2、应用程序向组合框发送消息
应用程序对组合框的操作通过使用函数SendMessage或SendDlgItemMessage向组合框
发送消息进行。对组合框的操作实际上是对组合框中各成员的操作。例如,应用程序
向组合框中的列表框发出CB_ADDSTRING消息,可在列表框中加入一项。
常用组合框消息及其说明
消息 说明
CB_SHOWDROPDOWN 显示下拉列表框
CB_ADDSTRING 在列表框中加入新项
CB_DELETESTRING 在列表框中删除新项
CB_INSERTSTRING 在列表框中插入新项
CB_FINDSTRING 在列表框中查询列表项
CB_RESETCONTENT 清空列表框
CB_DIR 在列表框中显示指定目录及文件
CB_SETCURSEL 设置列表框中的选中项,该项将在编辑框中显示
CB_GETCURSEL 获取列表框中的选中项的索引值
CB_GETCOUNT 获取列表框中的项的数目
CB_GETLBTEXT 获取列表框中的指定项的文本
CB_GETLBTEXTLEN 获取列表框中指定项的文本长度
CB_GETEDITSEL 获取编辑框中的选择
CB_SETEDITSEL 设置编辑框中的选择