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