六、Windows子窗口控件的清单方块类别—选择和取得项
SendMessage完成了下面所描述的任务之后,通常传回一个值。如果出错,那么这个值将被设定为LB_ERR(定义为-1)。
当清单方块中放入一些项目之后,您可以弄清楚清单方块中有多少项目:
iCount = SendMessage (hwndList, LB_GETCOUNT, 0, 0) ;
其它一些呼叫对单项选择清单方块和多项选择清单方块是不同的。让我们先来看看单项选择清单方块。
通常,您让使用者在清单方块中选择条目。但是如果您想加亮显示一个内定选择,则可以使用:
SendMessage (hwndList, LB_SETCURSEL, iIndex, 0) ;
将iParam设定为-1则取消所有选择。
您也可以根据项目的第一个字母来选择:
iIndex = SendMessage (hwndList, LB_SELECTSTRING, iIndex, (LPARAM) szSearchString) ;
在SendMessage呼叫中将iIndex作为iParam参数时,iIndex是索引,可以根据它搜索其开头字符与szSearchString相匹配的项目。iIndex的值等于-1时从头开始搜索,SendMessage传回被选中项目的索引。如果没有开头字符与szSearchString相匹配的项目时,SendMessage传回LB_ERR。
当您得到来自清单方块的WM_COMMAND消息时(或者在任何其它时候),您可以使用LB_GETCURSEL来确定目前选项的索引:
iIndex = SendMessage (hwndList, LB_GETCURSEL, 0, 0) ;
如果没有项目被选中,那么从呼叫中传回的iIndex值为LB_ERR。
您可以确定清单方块中字符串的长度:
iLength = SendMessage (hwndList, LB_GETTEXTLEN, iIndex, 0) ;
并可以将某项目复制到文字缓冲区中:
iLength = SendMessage ( hwndList, LB_GETTEXT, iIndex, (LPARAM) szBuffer) ;
在这两种情况下,从呼叫传回的iLength值是字符串的长度。对以NULL字符终结的字符串长度来说,szBuffer数组必须够大。您也许想用LB_GETTEXTLEN先分配一些局部内存来存放字符串。
对于一个多项选择清单方块,您不能使用LB_SETCURSEL、LB_GETCURSEL或者LB_SELECTSTRING,但是您可以使用LB_SETSEL来设定某特定项目的选择状态,而不影响有可能被选择的其它项:
SendMessage (hwndList, LB_SETSEL, wParam, iIndex) ;
wParam参数不为0时,选择并加亮某一项目;wParam为0时,取消选择。如果wParam等于-1,那么将选择所有项目或者取消所有被选中的项目。您可以如下确定某特定项目的选择状态:
iSelect = SendMessage (hwndList, LB_GETSEL, iIndex, 0) ;
其中,如果由iIndex指定的项目被选中,iSelect被设为非0,否则被设为0。