ListBox窗口用來列出一系列的文本,每條文本占一行。創建一個列表窗口可以使用成員函數:
BOOL CListBox::Create( LPCTSTR lpszText, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID = 0xffff );
其中dwStyle將指明該窗口的風格,除了子窗口常用的風格WS_CHILD,WS_VISIBLE外,你可以針對列表控件指明專門的風格。
LBS_MULTIPLESEL 指明列表框可以同時選擇多行
LBS_EXTENDEDSEL 可以通過按下Shift/Ctrl鍵選擇多行
LBS_SORT 所有的行按照字母順序進行排序
在列表框生成後需要向其中加入或是刪除行,可以利用:
int AddString( LPCTSTR lpszItem )添加行,
int DeleteString( UINT nIndex )刪除指定行,
int InsertString( int nIndex, LPCTSTR lpszItem )將行插入到指定位置。
void ResetContent( )可以刪除列表框中所有行。
通過調用int GetCount( )得到當前列表框中行的數量。
如果需要得到/設置當前被選中的行,可以調用int GetCurSel( )/int SetCurSel(int iIndex)。如果你指明了選擇多行的風格,你就需要先調用int GetSelCount( )得到被選中的行的數量,然後int GetSelItems( int nMaxItems, LPINT rgIndex )得到所有選中的行,參數rgIndex為存放被選中行的數組。通過調用int GetLBText( int nIndex, LPTSTR lpszText )得到列表框內指定行的字符串。
此外通過調用int FindString( int nStartAfter, LPCTSTR lpszItem )可以在當前所有行中查找指定的字符傳的位置,nStartAfter指明從那一行開始進行查找。
int SelectString( int nStartAfter, LPCTSTR lpszItem )可以選中包含指定字符串的行。
在MFC 4.2版本中添加了CCheckListBox類,該類是由CListBox派生並擁有CListBox的所有功能,不同的是可以在每行前加上一個檢查框。必須注意的是在創建時必須指明LBS_OWNERDRAWFIXED或LBS_OWNERDRAWVARIABLE風格。
通過void SetCheckStyle( UINT nStyle )/UINT GetCheckStyle( )可以設置/得到檢查框的風格,關於檢查框風格可以參考4.1 Button中介紹。通過void SetCheck( int nIndex, int nCheck )/int GetCheck( int nIndex )可以設置和得到某行的檢查狀態,關於檢查框狀態可以參考4.1 Button中介紹。
最後介紹一下列表框幾種常用的消息映射宏:
ON_LBN_DBLCLK 鼠標雙擊
ON_EN_ERRSPACE 輸入框無法分配內存時產生
ON_EN_KILLFOCUS / ON_EN_SETFOCUS 在輸入框失去/得到輸入焦點時產生
ON_LBN_SELCHANGE 選擇的行發生改變
使用以上幾種消息映射的方法為定義原型如:afx_msg void memberFxn( );的函數,並且定義形式如ON_Notification( id, memberFxn )的消息映射。如果在對話框中使用列表框,Class Wizard會自動列出相關的消息,並能自動產生消息映射代碼。