VC++----ListBox控件的使用


ListBox控件的使用

  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 )可以設置以及獲患上某行的檢查狀況,關於檢查框狀況可以vb listbox參考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會不佣人的勞力列出相干的消息,並能不佣人的勞力孕育發生消息照射代碼。

  CListBox 以及 CCheckListBox 簡介

  CListBox

  用來輸出一系列的文本,每條則本占一行。

  CCheckListBox

  CCheckListBox是由CListBox派生,具有CListBox的所有功能。與CListBox獨一差別是在每一行前面加之了一個檢查框(Check Box)。要使用CCheckListBox,需要在資源視圖(resourceview)中

  ⑴ Style->Owner draw->選中Fixed

  ⑵ 選中Has Strings

  (3) 新增成員變量

  方法一:路程經過過程類向導(ClassWizard)給新增成員變量CListBox m_listbox;,之后手動改成CCheckListBox m_listbox;

  方法二:用SubclassDlgItem或SubclassWindow函數,子類化控件。

  CCheckListBox m_checkListBox;

  m_checkListBox.SubclassDlgItem(IDC_LISTBOX1,this);

  1. listbox的styles先容

  在listbox的styles中的selection中有4個選項:Single,Multiple,Extended以及None。

  Single:允許每次選擇一個item。

  Multiple:允許每次選擇多個item。

  Extended:允許按下Shift/Ctrl鍵選擇多行。

  None:選中item而不高亮之,只顯示該item獲患上焦點(item外有矩形框)。

  2. 關於在運行時轉變listbox的style

  在運行時是不克不及轉變style的,只有毀掉本來的,再新創建一個listbox。或先創建兩個listbox,隱蔽其中一個。

  3. 設置listbox程度滾動條

  int dx=0;

  CSize sz;

  CDC* pDC = m_listbox.GetDC();

  CString str;

  for (int j = 0; j < m_listbox.GetCount(); j )

  {

  m_listbox.GetText(j, str);

  sz = pDC->GetTextExtent(str);

  if ( sz.cx > dx )

  dx = sz.cx;

  }

  m_listbox.ReleaseDC(pDC);

  m_listbox.SetHorizontalExtent(dx);

  4. 導入文件夾下所有文件以及目錄到listbox

  TCHAR szPath [MAX_PATH] = {"c:\\"};

  int nReslt = DlgDirList(szPath , IDC_LISTBOX1 , 0,

  DDL_READWRITE |DDL_READONLY |

  DDL_SYSTEM | DDL_ARCHIVE | DDL_DIRECTORY );

  5. listbox插手數據時,不佣人的勞力滾動到最后

   //不佣人的勞力滾動到最后並選中最后最后一行

  m_listbox.SetCurSel(m_listbox.GetCount()-1);

   //不佣人的勞力滾動到最后

  m_listbox.SetCaretIndex(m_listbox.GetCount()-1, FALSE);

  或

  m_listbox.SetTopIndex(m_listbox.GetCount()-1);

  6.關於 SetItemDataPtr() 以及 GetItemDataPtr() 的使用

  SetItemDataPtr()是將一個32位的指針與列表框中的一個item成立相干聯,在設置后可以路程經過過程調listbox 清空用GetItemDataPtr()而獲取。那末由此,咱們可以將列表框中的數據通外部成立聯系了。

  在現實應用方面,比如,在列表框中的item是人的姓名,那末咱們可以成立一個數據布局,存儲人的性別,住址,手機等相干信息,與item成立聯系。當取患上item時,同時咱們也取患上了該人的相干信息。

  示例:

  struct _Person_Info {

  CString strSex;

  CString strAddress;

  CString strPhoneNumber;

  }PersonInfo;

  PersonInfo *pi;

  int nIndex = m_listbox.AddString(_T("第三者"));

  m_pPersonInfo = new PersonInfo();

  pi->strSex = _T("Male");

  pi->strAddress = _T("xxx city");

  pi->strPhoneNumber = _T("1234567678");

  m_listbox.SetItemDataPtr(nIndex, (LPVOID)pi);

  //獲取

  PersonInfo *pi = NULL;

  pi = (PersonInfo *)m_listbox.GetItemDataPtr(nIndex);

  7. 帶彩色字符串 listbox

  http://www.codeguru.com/cpp/controls/listbox/color listboxes/article.php/c1611/

  http://www.codeproject.com/combobox/xlistbox.asp

  8. 違景透明 listbox

  http://www.codeguru.com/cpp/controls/listbox/color listboxes/article.php/c10413/

  9. 在listbox中使成為事實拖放

  ⑴ 在一個listbox中拖放

  http://www.codeguru.com/cpp/controls/listbox/dragd rop/article.php/c11061/

  http://www.codeguru.com/cpp/controls/listbox/dragd rop/article.php/c4747/

  ⑵ 在兩個listbox間使成為事實拖放

  http://msdn.microsoft.com/msdnmag/issues/04/10/CQA /

  http://www.codeguru.com/cpp/controls/listbox/dragd rop/article.php/c11069/

  10. CListBoxST 一個非常好的類

  http://www.codeguru.com/cpp/controls/listbox/artic le.php/c4753/

  11. 近似於 vb 屬性選擇窗戶

  http://www.codeguru.com/cpp/controls/listbox/artic le.php/c1607/

  http://www.codeproject.com/combobox/Property_List. asp

  12. 近似於 vc 的 tools->options->directories 的目錄設置窗戶

  http://www.codeguru.com/cpp/controls/listbox/artic le.php/c1613/

  13. 帶 icon 的 listbox

  http://www.codeguru.com/cpp/controls/listbox/artic le.php/c4749/

  http://www.codeguru.com/cpp/controls/listbox/artic le.php/c4753/

  14. 帶 checkbox 的listbox

  http://www.codeproject.com/combobox/CCheckListBoxU sage.asp

  15. 可編輯 item 的 listbox

  http://www.codeproject.com/combobox/lbed.asp

  16. 可 disable item 的 listbox

  http://www.codeproject.com/combobox/disableditemsl istbox.asp

  17. 一個自繪的listbox

  Q113189:

  ListDlg.exe Implements a List Box Full of Dialog Boxes

  http://support.microsoft.com/kb/113189/en-us


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM