窗口类型"listbox"。默认的列表框给父窗口发送WM_COMMAND消息,所以几乎所有列表框都加LBS_NOTIFY,允许列表框发送WM_COMMAND,LBS_SORT可以让列表自动排序。LBS_MULTIPLESEL创建多选列表框。LBS_NOREDRAW会在添加列表后阻止列表更新,也可以利用WM_SETREDRAW消息。另外还可与WS_BORDER、WS_SIZEBOX、WS_CAPTION一起使用。Windows定义了常用的风格LBS_STANDARD,它定义为(LBS_NOTIFY | LBS_SORT | WS_VSCROLL | WS_BORDER)。
发给列表控件的消息
SendMessage(hwndList,LB_ADDSTRING,0,(LPARAM)szString);
SendMessage(hwndList,LB_INSERTSTRING,iIndex,(LPARAM)szString);
SendMessage(hwndList,LB_DELETESTRING,iIndex,0);
SendMessage(hwndList,LB_RESETCONTENT,0,0):清空
SendMessage(hwndList,LB_SETREDRAW,FALSE,0):如果要增加或删除多项,可以先禁用重绘
SendMessage(hwndList,LB_SETREDRAW,TRUE,0):增加或删除完成后再允许重绘
SendMessage(hwndList,LB_GETCOUNT,0,0);
SendMessage(hwndList,LB_SETCURSEL,iIndex,0):只用在单选列表框中,iIndex为-1则全不选
SendMessage(hwndList,LB_SELECTSTRING,iIndex,(LPARAM)szSearchString):选中从iIndex开始第一个szSearchString,返回选中的Index,只用在单选列表框中。
SendMessage(hwndList,LB_GETCURSEL,0,0):只用在单选列表框中
SendMessage(hwndList,LB_GETTEXTLEN,iIndex,0);
SendMessage(hwndList,LB_GETTEXT,iIndex,(LPARAM)szBuffer):返回文本长度
SendMessage(hwndList,LB_SETSEL,wParam,iIndex):用在多选中,wParam表示是否选,可为-1,都不变。
SendMessage(hwndList,LB_GETSEL,iIndex,0);
WM_COMMAND的通知码(notification code)
LBN_ERRSPACE、LBN_SELCHANGE、LBN_DBLCLK、LBN_SELCANCEL、LBN_SETFOCUS、LBN_KILLFOCUS
List Box最强大的一条消息:LB_DIR。下面的函数可以把进程当前目录中的文件显示出来,还可以列出子目录和可用磁盘驱动器:
SendMessage(hwndList,LB_DIR,iAttr,(LPARAM)szFileSpec);
iAttr是文件属性。它的低位是属性位,属性的定义有DDL_READWRITE、DDL_READONLY、DDL_HIDEN、DDL_SYSTEM、DDL_DIRECTORY和DDL_ARCHIVE;高位是控制位,DDL_DRIVES显示可用驱动,DDL_EXCLUSIVE只显示没有置位的属性文件。
szFileSpec是文件名匹配字符串,如"*.*"。
(GetEnvironmentStrings()获得系统环境变量。用完后FreeEnvironmentStrings(pSting))