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

下載本文檔

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

文檔簡介

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

2、 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ù)十個之多需要說明的是,可以用索引來指定列表項,索引是從零開始的CListBox成員函數(shù)提供了下列函數(shù)用于插入和刪除列表項int AddString( LPCTSTR lpszItem );該函數(shù)用來往列表框中加入字符串,其中參數(shù)lpszItem指定了要

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

4、dString函數(shù)不同,InsertString函數(shù)不會導(dǎo)致LBS_SORT風(fēng)格的列表框重新排序不要在具有LBS_SORT風(fēng)格的列表框中使用InsertString函數(shù),以免破壞列表項的次序int DeleteString( UINT nIndex );該函數(shù)用于刪除指定的列表項,其中參數(shù)nIndex指定了要刪除項的索引函數(shù)的返回值為剩下的表項數(shù)目,如果nIndex超過了實際的表項總數(shù),則返回LB_ERRvoid ResetContent( );該函數(shù)用于清除所有列表項int Dir( UINT attr, LPCTSTR lpszWildCard );該函數(shù)用來向列表項中加入所有與指定通配符

5、相匹配的文件名或驅(qū)動器名參數(shù)attr為文件類型的組合。參數(shù)lpszWildCard指定了通配符(如*.cpp,*.*等)Dir函數(shù)attr參數(shù)的含義0x00000x00010x00020x00040x00100x00200x40000x8000 普通文件(可讀寫的文件) 只讀文件 隱藏文件 系統(tǒng)文件 目錄 文件的歸檔位已被設(shè)置 包括了所有與通配符相匹配的驅(qū)動器 排除標(biāo)志若指定該標(biāo)志,則只列出指定類型的文件名,否則,先要列出普通文件,然后再列出指定的文件 CListBox用于搜索、查詢和設(shè)置列表框的成員函數(shù)int GetCount( ) const;該函數(shù)返回列表項的總數(shù),若出錯則返回LB_ER

6、Rint FindString( int nStartAfter, LPCTSTR lpszItem ) const;該函數(shù)用于對列表項進(jìn)行與大小寫無關(guān)的搜索參數(shù)nStartAfter指定了開始搜索的位置, 合理指定nStartAfter可以加快搜索速度,若nStartAfter為-1,則從頭開始搜索整個列表參數(shù)lpszItem指定了要搜索的字符串函數(shù)返回與lpszItem指定的字符串相匹配的列表項的索引,若沒有找到匹配項或發(fā)生了錯誤,函數(shù)會返回LB_ERRFindString函數(shù)先從nStartAfter指定的位置開始搜索,若沒有找到匹配項,則會從頭開始搜索列表只有找到匹配項,或?qū)φ麄€列表搜

7、索完一遍后,搜索過程才會停止,所以不必?fù)?dān)心會漏掉要搜索的列表項 int GetText( int nIndex, LPTSTR lpszBuffer ) const;void GetText( int nIndex, CString& rString ) const;用于獲取指定列表項的字符串參數(shù)nIndex指定了列表項的索引參數(shù)lpszBuffer指向一個接收字符串的緩沖區(qū)引用參數(shù)rString則指定了接收字符串的CString對象第一個版本的函數(shù)會返回獲得的字符串的長度,若出錯,則返回LB_ERRint GetTextLen( int nIndex ) const;該函數(shù)返回指定列

8、表項的字符串的字節(jié)長度參數(shù)nIndex指定了列表項的索引若出錯則返回LB_ERRDWORD GetItemData( int nIndex ) const;每個列表項都有一個32位的附加數(shù)據(jù)該函數(shù)返回指定列表項的附加數(shù)據(jù),參數(shù)nIndex指定了列表項的索引若出錯則函數(shù)返回LB_ERRint SetItemData( int nIndex, DWORD dwItemData );該函數(shù)用來指定某一列表項的32位附加數(shù)據(jù)參數(shù)nIndex指定了列表項的索引dwItemData是要設(shè)置的附加數(shù)據(jù)值int GetTopIndex( ) const;該函數(shù)返回列表框中第一個可見項的索引,若出錯則返回LB_

9、ERRint SetTopIndex( int nIndex );用來將指定的列表項設(shè)置為列表框的第一個可見項,該函數(shù)會將列表框滾動到合適的位置參數(shù)nIndex指定了列表項的索引若操作成功,函數(shù)返回0值,否則返回LB_ERRCListBox的成員函數(shù)與列表項的選擇有關(guān)的函數(shù)int GetSel( int nIndex ) const;該函數(shù)返回指定列表項的狀態(tài)參數(shù)nIndex指定了列表項的索引如果查詢的列表項被選擇了,函數(shù)返回一個正值,否則返回0,若出錯則返回LB_ERR int GetCurSel( ) const;該函數(shù)僅適用于單選擇列表框,用來返回當(dāng)前被選擇項的索引,如果沒有列表項被選擇

10、或有錯誤發(fā)生,則函數(shù)返回LB_ERRint SetCurSel( int nSelect );該函數(shù)僅適用于單選擇列表框,用來選擇指定的列表項該函數(shù)會滾動列表框以使選擇項可見參數(shù)nIndex指定了列表項的索引,若為-1,那么將清除列表框中的選擇若出錯函數(shù)返回LB_ERRint SelectString( int nStartAfter, LPCTSTR lpszItem );該函數(shù)僅適用于單選擇列表框,用來選擇與指定字符串相匹配的列表項該函數(shù)會滾動列表框以使選擇項可見參數(shù)的意義及搜索的方法與函數(shù)FindString類似如果找到了匹配的項,函數(shù)返回該項的索引,如果沒有匹配的項,函數(shù)返回LB_ER

11、R并且當(dāng)前的選擇不被改變int GetSelCount( ) const;該函數(shù)僅用于多重選擇列表框,它返回選擇項的數(shù)目,若出錯函數(shù)返回LB_ERR int SetSel( int nIndex, BOOL bSelect = TRUE );該函數(shù)僅適用于多重選擇列表框,它使指定的列表項選中或落選參數(shù)nIndex指定了列表項的索引,若為-1,則相當(dāng)于指定了所有的項參數(shù)bSelect為TRUE時選中列表項,否則使之落選若出錯則返回LB_ERRint GetSelItems( int nMaxItems, LPINT rgIndex ) const;該函數(shù)僅用于多重選擇列表框,用來獲得選中的項的數(shù)

12、目及位置參數(shù)nMaxItems說明了參數(shù)rgIndex指向的數(shù)組的大小參數(shù)rgIndex指向一個緩沖區(qū),該數(shù)組是一個整型數(shù)組,用來存放選中的列表項的索引函數(shù)返回放在緩沖區(qū)中的選擇項的實際數(shù)目,若出錯函數(shù)返回LB_ERRint SelItemRange( BOOL bSelect, int nFirstItem, int nLastItem ); 該函數(shù)僅用于多重選擇列表框,用來使指定范圍內(nèi)的列表項選中或落選參數(shù)nFirstItem和nLastItem指定了列表項索引的范圍如果參數(shù)bSelect為TRUE,那么就選擇這些列表項,否則就使它們落選若出錯函數(shù)返回LB_ERR5.3 實際例子分析1建立

13、工程基于對話框的應(yīng)用程序ListDlg.2在對話框上加入1個ListBox控件和3個按鈕,分別是:增加,減少,查看。再增加一個Static Text控件。3在CListDlgDlg中增加變量int count;在BOOL CListDlgDlg:OnInitDialog()初始化count=0;4通過向?qū)砑覮istBox控件變量 m_l;5雙機(jī)增加按紐,接受默認(rèn)的函數(shù)名,添加如下代碼:void CListDlgDlg:OnButton1()6雙擊減少按鈕,接受默認(rèn)的函數(shù)名,加入如下代碼:void CListDlgDlg:OnButton2()/ TODO: Add your control

14、notification handler code here / TODO: Add your control notification handler code here CString l="字串0","字串1","字串2","字串3","字串4","字串5","字串6" m_l.AddString(lcount); count+; if(count=7) count=0; m_l.DeleteString(count); count-; if(cou

15、nt=0) count=7;7雙擊查看按鈕,接受默認(rèn)的函數(shù)名,加入如下代碼:void CListDlgDlg:OnButton3()其中m_st是通過向?qū)砑拥腟tatic Text控件變量。運行效果如圖:5-01具體見代碼。列表框控件(ListBox)列表框控件(ListBox)列表框控件可以顯示一個選項的列表, 以供用戶瀏覽或選擇。當(dāng)用戶用鼠標(biāo)點擊其中某項時,該項會高亮顯示并向列表框的父窗口發(fā)送消息, 父窗口根據(jù)用戶選擇進(jìn)行相應(yīng)的處理。列表框不但支持單選(風(fēng)格為Single), 即用戶一次只選一項, 也支持多選(風(fēng)格為Multiple) , 即一次可以同時選取多項。進(jìn)行多選時,用戶按下Ct

16、rl鍵(或Shift鍵),再用鼠標(biāo)點擊各個所要的選項。風(fēng)格為Extend時,除具有Multiple的功能外,還可按住鼠標(biāo)左鍵拖動進(jìn)行多選。取消No integer height.列表框有所謂索引號,用于定位項目。排在最上面的項目,其索引號是0,下一個項目的索引號則是1,依次遞增。索引號是連續(xù)有序的。正像用數(shù)組的索引號,可以很方/ TODO: Add your control notification handler code here int a; CString l="字串0","字串1","字串2","字串3"

17、,"字串4","字串5","字串6" a=m_l.GetCurSel(); m_st.SetWindowText("選擇了 "+la);便地引用數(shù)組元素一樣,利用列表的索引號,可以很方便地檢索到所要的項目或?qū)α斜磉M(jìn)行插入/刪除項目的操作。有關(guān)列表框的部分消息和函數(shù),請看CListBox類。CListBox類 /在afx.win.h中聲明CListBox類封裝了列表框控件的操作。用戶可以為列表控件的以下消息映射處理函數(shù):LBN_DBLCLK 當(dāng)用戶雙擊列表框的一個選項時,發(fā)送此消息 LBN_ERRSPACE 當(dāng)無法按

18、照特定需要分配足夠內(nèi)存時,發(fā)送此消息 LBN_KILLFOCUS 當(dāng)列表框控件失去輸入焦點時, 發(fā)送此消息LBN_SELCANCEL 當(dāng)列表框當(dāng)前選項被取消輸入時,發(fā)送此消息LBN_SELCHANGE 當(dāng)列表框當(dāng)前選項將要變化時,發(fā)送此消息LBN_SETFOCUS 當(dāng)列表框控件接收到輸入焦點時,發(fā)送此消息CListBox類主要的成員函數(shù)int GetCount() 獲得列表框中選項的數(shù)目int GetTopIndex() 獲得列表框中第一個可見選項的索引 int SetTopIndex(int nIndex) 設(shè)置列表框中第一個可見選項的索引int AddString(LPCSTR lpszI

19、tem) 將一個lpszItemz指向的字符串(項目名)加到列表最后int DeleteString(UINT nIndex ) 刪除索引號為nIndex的項目int InsertString (int nIndex, LPCSTR lpszItem ) 在nIndex指定位置插入一個項目int ResertContent( ) 刪除控件中所有的項Dir( ) 將文件名作為項插入這些函數(shù)CComboBox也有.TOP ListBox窗口用來列出一系列的文本,每條文本占一行。創(chuàng)建一個列表窗口可以使用成員函數(shù):BOOL CListBox:Create( LPCTSTR lpszText, DWOR

20、D dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID = 0xffff );其中dwStyle將指明該窗口的風(fēng)格,除了子窗口常用的風(fēng)格WS_CHILD,WS_VISIBLE外,你可以針對列表控件指明專門的風(fēng)格。LBS_MULTIPLESEL 指明列表框可以同時選擇多行 LBS_EXTENDEDSEL 可以通過按下Shift/Ctrl鍵選擇多行LBS_SORT 所有的行按照字母順序進(jìn)行排序在列表框生成后需要向其中加入或是刪除行,可以利用:int AddString( LPCTSTR lpszItem )添加行,int Delete

21、String( 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)前所有行中查找指定的字

溫馨提示

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

最新文檔

評論

0/150

提交評論