默认状态下,列表框窗口消息处理程序只显示列表条目,它的周围没有任何边界。
你可以使用窗口风格标识号WS_BORDER 来加上边框。
另外,你可以使用窗口风格WS_VSCROLL 来增加垂直滚动条,以便用鼠标来滚动列表框条目,也可以使用WS_HSCROLL 来增加水平滚动条,可以用来显示超出列表框宽度的条目。
缺省的列表框风格不会在用户选中某个列表项时产生通知消息,这样一来,程序必须向列表框发送消息以便了解其中条目的选择状态。所以,列表框控件通常都包括列表框风格LBS_NOTIFY,它可以使列表框控件在用户进行操作时,将一些状态信息及时反馈给应用程序。
另外,如果希望列表框控件对列表框中的条目进行排序,那么可以使用另一种常用的风格LBS_SORT。
一般情况下,创建列表框控件最常用的风格组合如下:
(LBS_NOTIFY | LBS_SORT | WS_VSCROLL | WS_BORDER)
LB_ADDSTRING | 新的字符串追加为列表框的最后一项 |
LB_INSERTSTRING | 字符串追加到列表框中的指定位置 |
LB_DELETESTRING | 从列表框中删除指定的条目 |
LB_RESETCONTENT | 清空列表框中的所有内容 |
LB_GETCOUNT | 获得列表框中的条目个数 |
LB_GETTEXTLEN | 确定列表框中指定条目的字符串长度 |
LB_SETTEXT | 设置列表框条目的字符串 |
LB_GETTEXT | 条目复制到文字缓冲区 |
LB_SETCURSEL | 设置当前选定的索引项 |
LB_GETCURSEL | 获得当前选定的索引项 |
LB_FINDSTRING | 希望查找的字符串指针 |
如果你采用LBS_SORT 风格,或者仅仅希望将新的字符串追加为列表框的最后一项,那么填入列表框最简单的方法是借助LB_ADDSTRING消息:
SendMessage(hwndList, LB_ADDSTRING, 0, (LPARAM)string)
我们也可以使用LB_INSERTSTRING指定一个索引值,将字符串插入到列表框中的指定位置:
SendMessage(hwndList, LB_INSERTSTRING,index,(LPARAM)string)
我们可以使用LB_GETCURSEL获得当前选定的索引项:
index = SendMessage(hwndList, LB_GETCURSEL, 0, 0)
具有LBS_NOTIFY 风格的列表框可能产生的通知消息及其含义如下所示。
【这些消息可以在WindowProcedure函数中switch(message)中通过WM_COMMAND消息的case语句进行拦截,设置相应的响应函数】
LBN_ERRSPACE | 内存分配失败 |
LBN_SELCHANGE | 单项选择列表框的当前选择项发生变化 |
LBN_CLICKED | 用户在列表框的某条目上单击了鼠标左键 |
LBN_DBLCLK | 用户在列表框某条目上双击了鼠标左键 |
LBN_SELCANCEL | 用户取消了某个条目的选择 |
LBN_SETFOCUS | 列表框获得了输入焦点 |
LBN_KILLFOCUS | 列表框失去了输入焦点 |
LBN_CLICKCHECKMARK | 用户单击了条目的检查框 |
LBN_ENTER | 用户在列表框中按下ENTER键 |