CListBox 和 CCheckListBox 簡介
CListBox
用來輸出一系列的文本,每條文本佔一行。
CCheckListBox
CCheckListBox是由CListBox派生,具有CListBox的所有功能。與CListBox唯一不同是在每一行前面加上了一個檢查框(Check Box)。要使用CCheckListBox,需要在資源視圖(resourceview)中
(1) Style->Owner draw->選中Fixed
(2) 選中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建立相關聯,在設置後可以通過調用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/colorlistboxes/article.php/c1611/
http://www.codeproject.com/combobox/xlistbox.asp
--------------------------------------------------------------------------------
8. 背景透明 listbox
http://www.codeguru.com/cpp/controls/listbox/colorlistboxes/article.php/c10413/
--------------------------------------------------------------------------------
9. 在listbox中實現拖放
(1) 在一個listbox中拖放
http://www.codeguru.com/cpp/controls/listbox/dragdrop/article.php/c11061/
http://www.codeguru.com/cpp/controls/listbox/dragdrop/article.php/c4747/
(2) 在兩個listbox間實現拖放
http://msdn.microsoft.com/msdnmag/issues/04/10/CQA/
http://www.codeguru.com/cpp/controls/listbox/dragdrop/article.php/c11069/
--------------------------------------------------------------------------------
10. CListBoxST 一個非常好的類
http://www.codeguru.com/cpp/controls/listbox/article.php/c4753/
--------------------------------------------------------------------------------
11. 類似於 vb 屬性選擇窗口
http://www.codeguru.com/cpp/controls/listbox/article.php/c1607/
http://www.codeproject.com/combobox/Property_List.asp
--------------------------------------------------------------------------------
12. 類似於 vc 的 tools->options->directories 的目錄設置窗口
http://www.codeguru.com/cpp/controls/listbox/article.php/c1613/
--------------------------------------------------------------------------------
13. 帶 icon 的 listbox
http://www.codeguru.com/cpp/controls/listbox/article.php/c4749/
http://www.codeguru.com/cpp/controls/listbox/article.php/c4753/
--------------------------------------------------------------------------------
14. 帶 checkbox 的listbox
http://www.codeproject.com/combobox/CCheckListBoxUsage.asp
--------------------------------------------------------------------------------
15. 可編輯 item 的 listbox
http://www.codeproject.com/combobox/lbed.asp
--------------------------------------------------------------------------------
16. 可 disable item 的 listbox
http://www.codeproject.com/combobox/disableditemslistbox.asp
--------------------------------------------------------------------------------
17. 一個自繪的listbox
Q113189:
ListDlg.exe Implements a List Box Full of Dialog Boxes
http://support.microsoft.com/kb/113189/en-us