CListBox & CCheckListBox 使用技巧

来源:互联网 发布:caffe 分布式 编辑:程序博客网 时间:2024/04/29 17:57

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