【原】CListBox & CCheckListBox 提示

來源:互聯網
上載者:User

                                【原】CListBox & CCheckListBox 提示

作者:lixiaosan
時間:04/06/2006

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
  

  

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.