列表框主要用於輸入,它允許用戶從所列出的表項中進行單項或多項選擇,被選擇的項呈高亮度顯示.列表框具有邊框,並且一般帶有一個垂直滾動條.列表框分單選列表框和多重選擇列表框兩種.單選列表框一次只能選擇一個列表項,而多重選擇列表框可以進行多重選擇.對於列表項的選擇,
應用程序用CreateWindowEx創建列表框控件時,可根據控件的用途在下表中選擇部份常數來設定其風格屬性(style)。
常數 說明
LBS_DISABLENOSCROLL 固定顯示垂直滾動條。未指定本項時,當列表未超出窗口,垂直滾動條自動隱藏。
LBS_EXTENDEDSEL 使用鍵盤“SHIFT”鍵或另指定鍵加鼠標進行多選。
LBS_HASSTRINGS 含有字符串的自繪式列表框.應用程序在自繪式列表框進行自繪時可以用LB_GETTEXT消息來取得列表項的文本。
LBS_MULTICOLUMN 多列列表框,帶有水平滾動條。應用程序可以用 LB_SETCOLUMNWIDTH 消息來爲列表框指定列數。
LBS_MULTIPLESEL 支持多重選擇。列表項的選擇狀態隨着用戶對該項單擊或雙擊鼠標而翻轉。
LBS_NODATA 本項已不被支持。
LBS_NOINTEGRALHEIGHT 列表框的尺寸由應用程序而不是Windows指定.通常,Windows指定尺寸會使列表項的某些部分隱藏起來。
LBS_NOREDRAW 禁止刷新。當選擇發生變化時防止列表框被更新,可發送WM_SETREDRAW來改變該風格。
LBS_NOSEL 禁止選擇,列表項只能看,不能被選擇。
LBS_NOTIFY 當用戶單擊或雙擊鼠標時通知父窗口。
LBS_OWNERDRAWFIXED 指定自繪式列表框,即由父窗口負責繪製列表框的內容,並且列表項有相同的高度。在控件被創建時父窗口將收到WM_MEASUREITEM 消息,當需要重繪時父窗口將收到 WM_DRAWITEM 消息。
LBS_OWNERDRAWVARIABLE 指定自繪式列表框,並且列表項有不同的高度.在控件被創建時父窗口將收到WM_MEASUREITEM消息,當需要重繪時父窗口將收到 WM_DRAWITEM 消息。
LBS_SORT 使插入列表框中的項按字母升序排列.
LBS_STANDARD 使用默認風格,相當於指定了邊框,垂直滾動條,字母升序排列和鼠標單雙擊通知消息這幾項風格
LBS_USETABSTOPS 使列表框在顯示列表項時識別並擴展製表符(08h),缺省的製表寬度是32個對話框單位。
LBS_WANTKEYBOARDINPUT 響應鍵盤輸入。當控件擁有鍵盤輸入焦點時,允許接收父窗口接收WM_VKEYTOITEM和WM_CHARTOITEM消息,輸入字符。
應用程序可以通過調用SendMessage向控件發送如下消息來設定和查詢控件各種參數。
uMsg wParam lParam 說明
LB_ADDFILE 0 件名地址 增加文件名。
LB_ADDSTRING 0 符串地址 追加一個列表項。如果指定了LBS_SORT風格,表項將被重排序,否則將被追加在列表框的最後一項。
LB_DELETESTRING 列表項序號 0 刪除指定的列表項,
LB_DIR DDL_ARCHIVE 指向通配符地址 在列表框中列出文件名,必須是當前路徑內,符合指定通配符,存檔屬性的文件名。
LB_DIR DDL_DIRECTORY 指向通配符地址 在列表框中列出當前路徑的子文件夾。子文件夾名前後將加上一對方括號"[*]"
LB_DIR DDL_DRIVES 指向通配符地址 在列表框中列出本機的所有驅動器名。驅動器名前後將加上一對方括號和減號"[-*-]"
LB_DIR DDL_EXCLUSIVE 指向通配符地址 只列出指定屬性的文件名,默認情況下是所有可讀寫文件都列出。如果沒有指定任何文件屬性,則不列出文件名。
LB_DIR DDL_HIDDEN 指向通配符地址 列出隱藏屬性的文件名。
LB_DIR DDL_READONLY 指向通配符地址 列出只讀屬性的文件名。
LB_DIR DDL_READWRITE 指向通配符地址 列出讀寫屬性的文件名。
LB_DIR DDL_SYSTEM 指向通配符地址 列出系統屬性的文件名。
LB_FINDSTRING 開始表項序號 字符串地址 查找匹配字符串,忽略大小寫,從指定開始表項序號開始查找,當查到某表項的文本字符串的前面包括指定的字符串則結束,找不到則轉到列表框第一項繼續查找,直到查完所有表項,如果wParam爲-1則從列表框第一項開始查找,如果找到則返回表項序號,否則返回LB_ERR。如:表項字符串爲"abc123"和指定字串"ABC"就算匹配。
LB_FINDSTRINGEXACT 開始表項序號 字符串地址 查找字符串,忽略大小寫,與LB_FINDSTRING不同,本操作必須整個字符串相同。如果找到則返回表項序號,否則返回LB_ERR。
LB_GETANCHORINDEX 0 0 返回鼠標最後選中的項的索引
LB_GETCARETINDEX 0 0 返回具有矩形焦點的項的索引
LB_GETCOUNT 0 0 返回列表項的總項數,若出錯則返回LB_ERR.
LB_GETCURSEL 0 0 本操作僅適用於單選擇列表框,用來返回當前被選擇項的索引,如果沒有列表項被選擇或有錯誤發生,則返回LB_ERR.
LB_GETHORIZONTALEXTENT 0 0 返回列表框的可滾動的寬度(象素)
LB_GETITEMDATA 索引 0 每個列表項都有一個32位的附加數據.該函數返回指定列表項的附加數據。若出錯則函數返回LB_ERR.
LB_GETITEMHEIGHT 索引 0 返回列表框中某一項的高度(單位:象素)
LB_GETITEMRECT 索引 RECT結構地址 獲得列表項的客戶區的RECT
LB_GETLOCALE 0 0 取列表項當前用於排序的語言代碼,當用戶使用LB_ADDSTRING向組合框中的列表框中添加記錄並使用LBS_SORT風格進行重新排序時,必須使用該語言代碼。返回值中高16位爲國家代碼。
LB_GETSEL 索引 0 返回指定列表項的狀態。如果查詢的列表項被選擇了,函數返回一個正值,否則返回0,若出錯則返回LB_ERR。
LB_GETSELCOUNT 0 0 本操作僅用於多重選擇列表框,它返回選擇項的數目,若出錯函數返回LB_ERR.
LB_GETSELITEMS 數組的大小 緩衝區 本操作僅用於多重選擇列表框,用來獲得選中的項的數目及位置。參數lParam指向一個整型數數組緩衝區,用來存放選中的列表項的索引。wParam說明了數組緩衝區的大小。本操作返回放在緩衝區中的選擇項的實際數目,若出錯函數返回LB_ERR.
LB_GETTEXT 索引 緩衝區 用於獲取指定列表項的字符串。參數lParam指向一個接收字符串的緩衝區.wParam則指定了接收字符串的列表項索引。返回獲得的字符串的長度,若出錯,則返回LB_ERR。
LB_GETTEXTLEN 索引 0 返回指定列表項的字符串的字節長度。wParam指定了列表項的索引.若出錯則返回LB_ERR。
LB_GETTOPINDEX 0 0 返回列表框中第一個可見項的索引,若出錯則返回LB_ERR.
LB_INITSTORAGE 表項數 內存字節數 本操作只適用於Windows95版本,當你將要向列表框中加入很多表項或有很大的表項時,本操作將預先分配一塊內存,以免在今後的操作中一次一次地分配內存,從而加快程序運行速度。
LB_INSERTSTRING 索引 字符串地址 在列表框中的指定位置插入字符串。wParam指定了列表項的索引,如果爲-1,則字符串將被添加到列表的末尾。lParam指向要插入的字符串。本操作返回實際的插入位置,若發生錯誤,會返回LB_ERR或LB_ERRSPACE。與LB_ADDSTRING不同,本操作不會導致LBS_SORT風格的列表框重新排序。建議不要在具有LBS_SORT風格的列表框中使用本操作,以免破壞列表項的次序。
LB_ITEMFROMPOINT 0 位置 獲得與指定點最近的項的索引,lParam指定在列表框客戶區,低16位爲X座標,高16位爲Y座標。
LB_RESETCONTENT 0 0 清除所有列表項。
LB_SELECTSTRING 開始表項序號 字符串地址 本操作僅適用於單選擇列表框,設定與指定字符串相匹配的列表項爲選中項。本操作會滾動列表框以使選擇項可見。參數的意義及搜索的方法與LB_FINDSTRING類似。如果找到了匹配的項,返回該項的索引,如果沒有匹配的項,返回LB_ERR並且當前的選中項不被改變。
LB_SELITEMRANGE TRUE或FALSE 範圍 本操作僅用於多重選擇列表框,用來使指定範圍內的列表項選中或落選.參數lParam指定了列表項索引的範圍,低16位爲開始項高16位爲結束項。如果參數wParam爲TRUE,那麼就選擇這些列表項,否則就使它們落選。若出錯函數返回LB_ERR。
LB_SELITEMRANGEEX 起點 終點 本操作僅用於多重選擇列表框,若指定終點大於起點則設定該範圍爲選中,若指定起點大於終點則設定該範圍爲落選。
LB_SETANCHORINDEX 索引 0 設置鼠標最後選中的表項成指定表項
LB_SETCARETINDEX 索引 TRUE或FALSE 設置鍵盤輸入焦點到指定表項,若lParam爲TRUE則滾動到指定項部份可見,若lParam爲FALSE則滾動到指定項全部可見。
LB_SETCOLUMNWIDTH 寬度(點) 0 設置列的寬度。
LB_SETCOUNT 項數 0 設置表項數目
LB_SETCURSEL 索引 0 本操作僅適用於單選擇列表框,設置指定的列表項爲當前選擇項。本操作會滾動列表框以使選擇項可見。參數wParam指定了列表項的索引,若爲-1,那麼將清除列表框中的選擇。若出錯函數返回LB_ERR。
LB_SETHORIZONTALEXTENT 寬度(點) 0 設置列表框的滾動寬度。
LB_SETITEMDATA 索引 數據值 更新指定列表項的32位附加數據。
LB_SETITEMHEIGHT 索引 高度(點) 指定列表項顯示高度,帶有LBS_OWNERDRAWVARIABLE(自繪列表項)風格的控件,只設置由wParam指定項的高度,其它風格將更新所有的列表項的高度。
LB_SETLOCALE 語言代碼 0 取列表項當前用於排序的語言代碼,當用戶使用LB_ADDSTRING向組合框中的列表框中添加記錄並使用LBS_SORT風格進行重新排序時,必須使用該語言代碼。返回值中高16位爲國家代碼。
LB_SETSEL TRUE或FALSE 索引 本操作僅適用於多重選擇列表框,它使指定的列表項選中或落選。參數lParam指定了列表項的索引,若爲-1,則相當於指定了所有的項。參數wParam爲TRUE時選中列表項,否則使之落選。若出錯則返回LB_ERR。
LB_SETTABSTOPS 站數 索引順序表 設置列表框的光標(輸入焦點)站數及索引順序表。
LB_SETTOPINDEX 索引 0 用來將指定的列表項設置爲列表框的第一個可見項,該函數會將列表框滾動到合適的位置。wParam指定了列表項的索引.若操作成功,返回0值,否則返回LB_ERR。
當用戶在列表框上進行各種操作時,其父窗口將收到WM_COMMAND通知消息,同時wParam的低16位帶控件的ID。lParam帶控件句柄(hWnd),wParam的高16位帶有如下表的消息代碼。
消息代碼 說明
LBN_DBLCLK 用戶單擊了列表項。
LBN_ERRSPACE 列表框無法申請到足夠的內存空間。
LBN_KILLFOCUS 列表框失去輸入焦點。
LBN_SELCANCEL 取消選擇列表項。
LBN_SELCHANGE 列表框的選擇項即將被改變。
LBN_SETFOCUS 列表框得到鍵盤輸入焦點。