WM_COMMAND消息:
LOWORD(wParam) 子窗口ID
HIWORD(wParam) 通知码
lParam 子窗口句柄
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
按钮类
创建按钮控件时,其类名为”buttton".
通知码
1)BN_CLICKED,BN_PAINT,BN_HILITE或BN_PUSHED,BN_UNHILITE或BN_UNPUSHED,BN_DISABLE,这些同志码用于过时的按钮样式BS_USERBUTTON.
2)BN_SETFOCUS,BN_KILLFOCUS仅当按钮样式为BS_NOTIFY是才发送。
3) BN_DOUBLECLICKED或BN_DBLCLK只用于BS_RADIOBUTTTON,BS_AUTORADIOBUTTON,BS_OWNERDRAW,或者按钮样式包含BS_NOTIFY的其他按钮。
按钮消息
BM_GETCHECK BM_SETCHECK
BM_GETSTATE BM_SETSTATE
BM_SETSTYLE BM_CLICK
BM_GETIMAGE BM_SETIMAGE
获取子窗口ID:
id=GetWindowLond(hwndchild,GWL_ID);
id=GetDlgCtrlID(hwndchild);
获取子窗口的句柄:
hwndchild=GetDlgItem(hwndparent,id);
获取父窗口的句柄:
hwndparent=GetParent(hwndchild);
获取实例句柄:
GetWindowLong(hwnd,GWL_HINSTANCE);
1)按钮
窗口样式:BS_PUSHBUTTON和BS_DEFPUSHBUTTON,这两个窗口样式作为子窗口空间时,是同样类型,只是BS_DEFPUSHBUTTON的边框粗一些。但两种样式用于对话框时,完全不同的功能。
当鼠标按下按钮时,其通知码为BN_CLICKED。
其可以通过父窗口发送BM_SETSTATE和BM_GETSTATE消息来设置和获取按钮的状态。
SendMessage(hwndButton,BM_SETSTATE,1,0);//设置按钮为按下状态
SendMessage(hwndButton,BM_SETSTATE,0,0); //设置按钮恢复到正常状态
2)复选框
窗口样式:BS_CHECKBOX样式,该种样式必须自己给空间发送一个BM_SETCHECK消息来设置其选中状态。当wParam的值为1时,为选中,为0时则为清除状态。也可通过发送一BM_GETCHECK消息来获取其状态。
SendMessage(hwndButton,BM_SETCHECK,1,0);
SendMessage(hwndButton,BM_GETCHECK,0,0);
而BS_AUTOCHECKBOX样式,其窗口过程自动清除和设置其状态,通常可以忽略WM_COMMAND消息。
还有BS_3STATE和BS_AUTO3STATE样式。其增加了一种状态-----一个灰色的复选框,表示其不可用。
3)单选按钮
窗口样式:BS_RADIOBUTTON和BS_AUTORADIONBUTTON,但是值得注意的是BS_AUTORADIOBUTTON按钮只能用于对话框。也可通过消息BM_SETCHECK和BM_GETCHECK来设置或者获取其状态
4)组合框
窗口样式:BS_GROUPBOX。这种空间不接受鼠标或者键盘输入,也不向父窗口发送WM_COMMAND消息。其文本显示在矩形区域的顶部
5)设置文本的方法
SetWindowText(hwnd,string);
length=GetWindowText(hwnd,string,imaxlength);
length=GetWindowTextLength(hwnd);
6)显示和隐藏按钮
当在创建按钮时,设置样式为WS_VISIBLE时,就无需在在调用显示函数。
ShowWindow(hwndchild,SW_SHOWNORMAL);
ShowWindow(hwndchild,SW_HIDE);
IsWindowVisible(hwndchild);
EnableWindow(hwndchild,FALSE);//禁用窗口
EnableWindow(hwndchild,TRUE);//启用窗口
IsEnableWindow(hwndchild);//判断窗口是否可用
7)输入焦点
注意:当一个窗口失去焦点时,会向它发送WM_KILLFOCUS消息,其wParam为将要获得焦点窗口的句柄.而当一个窗口获得焦点时,会收到WM_SETFOCUS消息,其wParam 为失去焦点窗口的句柄。
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
静态类
创建静态控件的时候,其类名为“static".
值得注意的是:静态控件其不接受键盘或者鼠标的输入,也不会向父窗口发送WM_COMMAND消息。当你用鼠标在上面移动或者单击时,其回想子窗口会捕获一个WM_NCHITTEST消息,并向windows返回一个HITRANSPATENT值。并导致windows向其父窗口也会发送一个WM_NCHITTEST消息,父窗口将消息交由DefWindowProc处理。
静态窗口样式:
SS_BLACKRECT SS_BLACKFRAME
SS_GRAYRECT SS_GRAYFRAME
SS_WHITERECT SS_WHITEFRAME
SS_LEFT SS_RIGHT
SS_ CENTER SS_ETCHEDHORZ
SS_ETCHEDVERT SS_ETCHEDRAME
设置文本可以通过调用SetWindowText函数来设置。
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
滚动条类
创建滚动条控件时,其类名为“scrollbar".
滚动条控件样式:SBS_VERT SBS_HORZ SBS_LEFTALIGN SBS_RIGHTALIGN SBS_TOPALIGN SBS_BOTTOMALIGN.
注意:滚动条控件不会发送WM_COMMAND消息。其和窗口滚动条一样发送WM_VSCROLL和WM_HSCROLL消息,可以通过lparam参数来区分到底是滚动条控件,还是窗口滚动条。如果lparam值为0,则表示其为窗口滚动条;如果其等于滚动条控件的句柄则表示其为滚动条控件。
获取窗口滚动条的高度和宽度:
GetSystemMetrics(SM_CYHSCROLL);
GetSystemMetrics(SM_CXVSCROLL);
可以通过函数SetScrollRang,SetScrollPos,SetScrollInfo函数来设置滚动条控件的范围和位置,其与窗口滚动条设置的区别在于:滚动条控件第二个参数为SB_CTL,而窗口滚动条的第二个参数为SB_VERT或者SB_HORZ。
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
编辑类
创建编辑控件时,其类名为“edit”
注意:其建立以后就具有删除(ctrl+x),赋值(ctr+c),剪切(ctrl+v)功能.并可通过选中文本。
编辑控件的样式:
ES_LEFT ES_RIGHT ES_CENTER
ES_MULTILINE ES_AUTOHSCROLL ES_AUTOVSCROLL
ES_NOHIDEESEL
其也接受WM_COMMAND消息
通知码为:
EN_SETFOCUS 编辑控件得到了输入焦点
EN_KILLFOCUS 编辑控件失去了输入焦点
EN_CHANGE 编辑控件的内容将变化
EN_UPDATE 编辑控件的内容变化了
EN_ERRSPACE 编辑控件没有空间了
EN_MAXTEXT 编辑控件没有空间完成插入了
EN_HSCROLL 编辑控件水平滚动条被单击了
EN_VSCROLL 编辑控件垂直滚动条被单击了
传递给控件的消息:
WM_COPY 复制到剪贴板
WM_CUT 剪切到剪切板
WM_CLEAR 清除指定内容但不传到剪贴板
WM_PASTE 将剪贴板的内容插入到指定位置
EM_GETSEL 获得当前选择文本的初始位置和终止位置
EM_SETSEL 选着文本
EM_ REPLACESEL 替代文本
EM_GETLINTCOUNT 得到编辑器函数
EM_LINEINDEX 获得编辑器缓冲区起点到这行的位移量
EM_LINELENGTH 得到行的长度
EM_ GETLINE 复制某一行到缓冲区
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
列表框类
在创建列表框控件时,其窗口类名为“listbox".
列表框分为单选列表框和多选列表框 。
对于单选列表框,方向键可以同时移动光标和当前的选择,并可以滚动列表框的内容;上下翻页键因为可通过移动光标来滚动列表框,但不会移动选择的项目。按下一个字母键可移动光标和当前选择到以那个字母开头的第一项(或者下一项)。通过单击或者双击鼠标也可以选中该项。
对于多选列表框,空格键可以切换选择项的选择状态。方向键取消所有以前选定的项目,并移动和选中项,就像单选列表框一样。然而。ctrl键加方向键可以移动光标,但不移动选中项。shift键加方向键可以扩展选中项。单击或者双击多选列表框的一个项目,会取消所有先前选择的项目,只选择被单击的项目。如果在点击或者双击的时候按住shift键,则不会取消先前选择。
注意:对于列表框在默认情况下是不会发送WM_COMMAND消息的,只有在建立列表框是样式中包含LBS_NOTIFY,其才会发送WM_COMMAND消息。
如果想让列表框的内容排序,则可以用LBS_SORT样式。
默认情况下,列表框是单选的,只有包含样式LBS_MULTIPLESEL才会是所选。
LBS-NOREDRAW样式,会阻止程序在添加项目时自动更新。
WS_BORDER样式,为列表框添加一个边框。
WS_SIZEBOX样式,允许用户该表列表框的大小。
WS_CAPTION样式,允许在父窗口的客户区移动它。
LBS_STANDARD样式,包含LBS_BOTIFY,LBS_SORT,WS_VSCROLL,WS_BORDER.
向列表框中添加字符串
字符串可以通常可以通过数字索引来引用,索引0为最上面的项目。
SendMessage的返回值:如果字符串用完空间,则返回LB_ERRSPACE(-1);如果字符串发生其他错误,则返回LB_ERR(-1);如果成功,则返回LB_OKAY(0)。
如果使用LBS_SORT样式,那么添加字符串的简单方式是使用LB_ADDSTRING:
SendMessage(hwndlist,LB_ADDSTRING,0,(LPARAM)szstring);
如果维使用LBS_SORT样式,则可以使用LB_INSERTSTRING消息,通过索引值,添加:
SendMessage(hwndlist,LB_INSERTSTRING,iIndex,(LPARAM)szstring);
列出文件
SendMessage(hwndlist,LB_DIR,iAtrr,(LPARAM)szFileSpec);
IAtrr为文件属性代码:
低字节
DDL_READWRITE 普通文件
DDL_READONLY 只读文件
DDL_HIDDEN 隐藏文件
DDL_SYSTEM 系统文件
DDLL-DIRECTORY 子文件
DDL_ARCHIVE 设置了存档位的文件
高字节
DDL_DRIVES 包含驱动器字符
DDL_EXCLUSIVE 只搜索指定的值
当文件属性代码为DDL_READWRITE时,列表框会列出普通文件,只读文件,以及存档位已设置的文件
当文件属性代码为DDL_DIRECTORY时,除上面外还要包含带有方括号的目录名以及子目录名。
当文件属性代码为DDL_DRIVES|DDL_DIRECTORY会将所有可用驱动器,驱动器字符用短划线分割。
文件列表的排列
当列表框的样式包含LBS_SORT时,列表框将首先列出文件限定条件的所有名称,然后列出子目录名称。第一个子目录表将采用如下形式:
[..]
这种“双点”子目录可以让用户返回上一级目录。当已是根目录时,不出现双点符号。最后,特定的子目录名称用以下方式:
[子目录名]
后面紧跟有效磁盘驱动器的清单,其形式如下:
[-A-]