列表框控件CListBox和列表控件_第1頁
列表框控件CListBox和列表控件_第2頁
列表框控件CListBox和列表控件_第3頁
列表框控件CListBox和列表控件_第4頁
列表框控件CListBox和列表控件_第5頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、VC+MFC 編程技術(shù)-第五章列表框控件(CListBox)和列表控件(CListCt列表框主要用于輸入,它允許用戶從所列出的表項(xiàng)中進(jìn)行單項(xiàng)或多項(xiàng)選擇, 被選擇的項(xiàng)呈高亮度顯示.列表框具有邊框,并且一般帶有一個(gè)垂直滾動(dòng)條.列 表框分單選列表框和多重選擇列表框兩種.單選列表框一次只能選擇一個(gè)列表項(xiàng),而多重選擇列表框可以進(jìn)行多重選擇.5.1 MFC 的 CListBox 類MFC的CListBox類圭寸裝了列表框.CListBox類的Create成員函數(shù)負(fù)責(zé)列表框的創(chuàng)建,該函數(shù)的聲明是BOOLCreate( DWORdWStyle, con st RECT&ect, CWnd*pPare

2、ntWnd, UINT nID );參數(shù)dwStyle指定了列表框控件的風(fēng)格,如表 6.10所示,dwStyle可以是 這些風(fēng)格的組合.rect說明了控件的位置和尺寸.pParentWnd指向父窗口,該 參數(shù)不能為NULL nID則說明了控件的ID。如果創(chuàng)建成功,該函數(shù)返回 TRUE 否則返回FALSE5.2 CListBox類的成員函數(shù)CListBox類的成員函數(shù)有數(shù)十個(gè)之多.需要說明的是,可以用索引來指定 列表項(xiàng),索引是從零開始的.CListBox成員函數(shù)提供了下列函數(shù)用于插入和刪除列表項(xiàng)int AddStri ng( LPCTSTR lpszItem );該函數(shù)用來往列表框中加入字符串,

3、其中參數(shù)lpszItem 指定了要添加的字符串.函數(shù)的返回值是加入的字符串在列表框中的位置,如果發(fā)生錯(cuò)誤,會(huì)返回 LB_ERR或 LB_ERRSPAC曲存不夠).如果列表框未設(shè)置LBS_SOR風(fēng)格,那么字符串將被添加到列表的末尾,如果設(shè)置了LBS_SOR風(fēng)格,字符串會(huì)按排序規(guī)律插入到列表中.int InsertString( int nIndex, LPCTSTR lpszItem );該函數(shù)用來在列表框中的指定位置插入字符串.參數(shù)nIndex給出了插入位置(索引),如果值為-1,貝U字符串將被添加到列表的末尾.參數(shù)lpszItem指定了要插入的字符串.函數(shù)返回實(shí)際的插入位置,若發(fā)生錯(cuò)誤,會(huì)返

4、回LB_ERR或LB_ERRSPACE與 AddString 函數(shù)不同,InsertString函數(shù)不會(huì)導(dǎo)致 LBS_SORT風(fēng)格的列表框重新排序.不要在具有LBS_SORT風(fēng)格的列表框中使用 In sertStri ng 函數(shù),以免破壞列表項(xiàng)的次序.int DeleteString( UINT nlndex );該函數(shù)用于刪除指定的列表項(xiàng),其中參數(shù)nlndex指定了要?jiǎng)h除項(xiàng)的索引.函數(shù)的返回值為剩下的表項(xiàng)數(shù)目,如果nlndex超過了實(shí)際的表項(xiàng)總數(shù),則返回LB_ERRvoid ResetC onten t();該函數(shù)用于清除所有列表項(xiàng).int Dir( UINT attr, LPCTSTR I

5、pszWildCard );該函數(shù)用來向列表項(xiàng)中加入所有與指定通配符相匹配的文件名或驅(qū)動(dòng)器名.參數(shù)attr為文件類型的組合。參數(shù)lpszWildCard指定了通配符(如*.cpp , *等).Dir函數(shù)attr參數(shù)的含義0x0000普通文件(可讀寫的文件).0x0001只讀文件0x0002隱藏文件.0x0004系統(tǒng)文件.0x0010目錄.0x0020文件的歸檔位已被設(shè)置.0x4000包括了所有與通配符相匹配的驅(qū)動(dòng)器.0x8000排除標(biāo)志.若指定該標(biāo)志,則只列出指定類型的文件名,否貝先要列出普通文件,然后再列出指定的文件.CListBox用于搜索、查詢和設(shè)置列表框的成員函數(shù).int GetCou

6、 nt( ) con st;該函數(shù)返回列表項(xiàng)的總數(shù),若出錯(cuò)則返回LB_ERRint Fin dStri ng( int nStartAfter, LPCTSTR lpszItem ) const;該函數(shù)用于對列表項(xiàng)進(jìn)行與大小寫無關(guān)的搜索.參數(shù)nStartAfter 指定了開始搜 索的位置,合理指定nStartAfter 可以加快搜索速度,若nStartAfter 為-1 ,則 從頭開始搜索整個(gè)列表.參數(shù)lpszItem指定了要搜索的字符串.函數(shù)返回與 lpszItem指定的字符串相匹配的列表項(xiàng)的索引,若沒有找到匹配項(xiàng)或發(fā)生了錯(cuò) 誤,函數(shù)會(huì)返回LB_ERR FindString 函數(shù)先從nSta

7、rtAfter指定的位置開始搜索,若沒有找到匹配項(xiàng),則會(huì)從頭開始搜索列表.只有找到匹配項(xiàng),或?qū)φ麄€(gè)列 表搜索完一遍后,搜索過程才會(huì)停止,所以不必?fù)?dān)心會(huì)漏掉要搜索的列表項(xiàng).int GetText( int nln dex, LPTSTR lpszBuffer ) con st;void GetText( int nln dex, CStri ng& rStri ng ) con st;用于獲取指定列表項(xiàng)的字符串.參數(shù)nIndex指定了列表項(xiàng)的索引.參數(shù)lpszBuffer指向一個(gè)接收字符串的緩沖區(qū).引用參數(shù)rString則指定了接收字符串的CString對象.第一個(gè)版本的函數(shù)會(huì)返回獲得的

8、字符串的長度,若出錯(cuò), 則返回LB_ERRint GetTextLe n( int nln dex ) con st;該函數(shù)返回指定列表項(xiàng)的字符串的字節(jié)長度.參數(shù)nIndex指定了列表項(xiàng)的索引.若出錯(cuò)則返回LB_ERRDWORD GetltemData( int nln dex ) const;每個(gè)列表項(xiàng)都有一個(gè)32位的附加數(shù)據(jù)該函數(shù)返回指定列表項(xiàng)的附加數(shù)據(jù),參數(shù)nlndex指定了列表項(xiàng)的索引若出錯(cuò)則函數(shù)返回LB_ERRint SetltemData( int nln dex, DWORD dwItemData );該函數(shù)用來指定某一列表項(xiàng)的32位附加數(shù)據(jù)參數(shù)nlndex指定了列表項(xiàng)的索 引.

9、dwItemData是要設(shè)置的附加數(shù)據(jù)值.int GetTop In dex( ) con st;該函數(shù)返回列表框中第一個(gè)可見項(xiàng)的索引,若出錯(cuò)則返回LB_ERRint SetTop In dex( int nln dex );用來將指定的列表項(xiàng)設(shè)置為列表框的第一個(gè)可見項(xiàng),該函數(shù)會(huì)將列表框滾動(dòng)到合 適的位置.參數(shù)nlndex指定了列表項(xiàng)的索引.若操作成功,函數(shù)返回0值,否則返回LB_ERRCListBox的成員函數(shù)與列表項(xiàng)的選擇有關(guān)的函數(shù)int GetSel( int nln dex ) con st;該函數(shù)返回指定列表項(xiàng)的狀態(tài).參數(shù) nlndex指定了列表項(xiàng)的索引.如果查詢的列表項(xiàng)被選擇了,函

10、數(shù)返回一個(gè)正值,否則返回0,若出錯(cuò)則返回LB_ERRint GetCurSel( ) con st;該函數(shù)僅適用于單選擇列表框,用來返回當(dāng)前被選擇項(xiàng)的索引,如果沒有列表項(xiàng) 被選擇或有錯(cuò)誤發(fā)生,則函數(shù)返回LB_ERRint SetCurSel( int nSelect );該函數(shù)僅適用于單選擇列表框,用來選擇指定的列表項(xiàng).該函數(shù)會(huì)滾動(dòng)列表框以 使選擇項(xiàng)可見.參數(shù)nlndex指定了列表項(xiàng)的索引,若為-1,那么將清除列表框 中的選擇.若出錯(cuò)函數(shù)返回LB_ERRint SelectStri ng( int nStartAfter, LPCTSTR lpszltem );該函數(shù)僅適用于單選擇列表框,用來

11、選擇與指定字符串相匹配的列表項(xiàng).該函數(shù)會(huì)滾動(dòng)列表框以使選擇項(xiàng)可見.參數(shù)的意義及搜索的方法與函數(shù)Fin dStri ng類似.如果找到了匹配的項(xiàng),函數(shù)返回該項(xiàng)的索引,如果沒有匹配的項(xiàng),函數(shù)返回 LB_ER齊且當(dāng)前的選擇不被改變.int GetSelCou nt( ) con st;該函數(shù)僅用于多重選擇列表框,它返回選擇項(xiàng)的數(shù)目,若出錯(cuò)函數(shù)返回LB_ERRnlndexint SetSel( int nlndex, BOOL bSelect = TRUE );該函數(shù)僅適用于多重選擇列表框,它使指定的列表項(xiàng)選中或落選.參數(shù)指定了列表項(xiàng)的索引,若為-1 ,則相當(dāng)于指定了所有的項(xiàng).參數(shù)bSelect為TR

12、UE 時(shí)選中列表項(xiàng),否則使之落選若出錯(cuò)則返回LB_ERRint GetSelltems( int nMaxltems, LPINT rglndex) const;該函數(shù)僅用于多重 選擇列表 框,用來 獲得選中的 項(xiàng)的數(shù)目及位置. 參數(shù) nMaxItems說明了參數(shù)rglndex指向的數(shù)組的大小.參數(shù)rglndex指向一個(gè)緩沖 區(qū),該數(shù)組是一個(gè)整型數(shù)組,用來存放選中的列表項(xiàng)的索引.函數(shù)返回放在緩沖 區(qū)中的選擇項(xiàng)的實(shí)際數(shù)目,若出錯(cuò)函數(shù)返回 LB_ERRint SelItemRange( BOOL bSelect, int nFirstItem, int nLastItem );該函數(shù)僅用于多重選擇

13、列表框,用來使指定范圍內(nèi)的列表項(xiàng)選中或落選.參數(shù)nFirstltem 和nLastItem 指定了列表項(xiàng)索引的范圍.如果參數(shù)bSelect為TRUE那么就選擇這些列表項(xiàng),否則就使它們落選.若出錯(cuò)函數(shù)返回LB_ERR5.3實(shí)際例子分析1 建立工程基于對話框的應(yīng)用程序ListDlg.2 在對話框上加入1個(gè)ListBox控件和3個(gè)按鈕,分別是:增加,減少,查看。再增加一個(gè)Static Text控件。3 在 CListDlgDlg 中增加變量 int count;在 BOOL CListDlgDlg:OnlnitDialog()初 始化 count=0;4 通過向?qū)砑覮istBox控件變量m_l;5

14、 雙機(jī)增加按紐,接受默認(rèn)的函數(shù)名,添加如下代碼:void CListDlgDlg:O nButto n1()/ TODO: Add your con trol no tificatio n han dler code hereCString l="字串0","字串1","字串2","字串3","字串4","字串5","字串6" m_l .AddStri ng(lcou nt);coun t+;if(co un t=7)coun t=0;6 雙擊減少按鈕,接

15、受默認(rèn)的函數(shù)名,加入如下代碼:void CListDlgDlg:O nButto n2()/ TODO: Add your con trol no tificatio n han dler code herem_I.DeleteStri ng(co un t);coun t-;if(co un t=0)coun t=7;7 雙擊查看按鈕,接受默認(rèn)的函數(shù)名,加入如下代碼:void CListDlgDlg:O nButto n3()/ TODO: Add your con trol no tificatio n han dler code hereint a;CString l="字串0

16、","字串1","字串2","字串3","字串4","字串5","字串6" a=m_I.GetCurSel();m_st.SetWindowText("選擇了 "+la);其中m_st是通過向?qū)砑拥?Static Text控件變量。運(yùn)行效果如圖:5-01具體見代碼。列表框控件(ListBox) 列表框控件(ListBox)列表框控件可以顯示一個(gè)選項(xiàng)的列表,以供用戶瀏覽或選擇。當(dāng)用戶用鼠標(biāo)點(diǎn)擊其中某項(xiàng)時(shí),該項(xiàng)會(huì)高亮顯示并向列表框的父窗口發(fā)送消息,

17、父窗口根據(jù)用戶選擇進(jìn)行相應(yīng)的處理。列表框不但支持單選(風(fēng)格為Single),即用戶一次只選一項(xiàng),也支持多選(風(fēng)格為Multiple),即一次可以同時(shí)選取多項(xiàng)。進(jìn)行多選時(shí),用戶按下Ctrl鍵(或Shift鍵),再用鼠標(biāo)點(diǎn)擊各個(gè)所要的選項(xiàng)。風(fēng)格為Extend時(shí),除具有Multiple 的功能外,還可按住鼠標(biāo)左鍵拖動(dòng)進(jìn)行多選。取消No in teger height.列表框有所謂索引號(hào),用于定位項(xiàng)目。排在最上面的項(xiàng)目,其索引號(hào)是0,下一個(gè)項(xiàng)目的索引號(hào)則是1,依次遞增。索引號(hào)是連續(xù)有序的。正像用數(shù)組的索引號(hào),可以很方便地引用數(shù)組元素一樣,利用列表的索引號(hào),可以很方便地檢索到所要的項(xiàng)目或?qū)α斜?進(jìn)行插入

18、 / 刪除項(xiàng)目的操作。有關(guān)列表框的部分消息和函數(shù),請看CListBox 類。CListBox類 /afx.win.h 中聲明CListBox 類封裝了列表框控件的操作。用戶可以為列表控件的以下消息映射處理函數(shù)LBN_DBLCLKLBN_ERRSPACELBN_KILLFOCUS當(dāng)用戶雙擊列表框的一個(gè)選項(xiàng)時(shí),發(fā)送此消息 當(dāng)無法按照特定需要分配足夠內(nèi)存時(shí),發(fā)送此消息 當(dāng)列表框控件失去輸入焦點(diǎn)時(shí), 發(fā)送此消息LBN_SELCANCEL當(dāng)列表框當(dāng)前選項(xiàng)被取消輸入時(shí),發(fā)送此消息LBN_SELCHANGE當(dāng)列表框當(dāng)前選項(xiàng)將要變化時(shí),發(fā)送此消息LBN_SETFOCUS當(dāng)列表框控件接收到輸入焦點(diǎn)時(shí),發(fā)送此消息

19、CListBox 類主要的成員函數(shù) int GetCount() int GetTopIndex() int SetTopIndex(int nIndex) int AddString(LPCSTR lpszItem)int DeleteString(UINT nIndex )在 nIndex 指定位置插入一個(gè)獲得列表框中選項(xiàng)的數(shù)目 獲得列表框中第一個(gè)可見選項(xiàng)的索引 設(shè)置列表框中第一個(gè)可見選項(xiàng)的索引 將一個(gè) lpszItemz 指向的字符串 ( 項(xiàng)目名 ) 加到列刪除索引號(hào)為 nIndex 的項(xiàng)目int InsertString (int nIndex, LPCSTR lpszItem )項(xiàng)目

20、int ResertContent( ) Dir( )刪除控件中所有的項(xiàng)將文件名作為項(xiàng)插入這些函數(shù)CComboBoXL有.TOPListBox 窗口用來列出一系列的文本,每條文本占一行。 創(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.CHILDWSVISIBLE7卜,你可以針對列表控件指明專門的風(fēng)格。LBS_MUL

21、TIPLESEL指明列表框可以同時(shí)選擇多行LBS_EXTENDEDSE可以通過按下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ù)量

22、。如果需要得到/設(shè)置當(dāng)前被選中的行,可以調(diào)用int GetCurSel( )/int SetCurSel(intilndex)。如果你指明了選擇多行的風(fēng)格,你就需要先調(diào)用int GetSelCount()得到被選中的行的數(shù)量,然后 int GetSelltems( int nMaxltems, LPINT rglndex )得到所有選中的行, 參數(shù)rglndex 為存放被選中行的數(shù)組。通過調(diào)用int GetLBText( int nlndex, LPTSTRlpszText )得到列表框內(nèi)指定行的字符串。此外通過調(diào)用 int Fin dStri ng( int nStartAfter, LPCTSTR lpszltem )可以

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論