【VC编程技巧】控件☞4.4ListBox控件(打造带有复选框的ListBox)

来源:互联网 发布:wifi渗透软件 编辑:程序博客网 时间:2024/05/17 03:18

4.4ListBox控件(打造带有复选框的ListBox)


下面通过两种方式构建复选框ListBox


1.对话框中插入ListBox控件(IDC_LIST1,IDC_LIST2),如下设置属性

图1


  • 方式一:

2.对ListBox控件(IDC_LIST1)关联控件变量m_checkListBox1,将控件变量类型CListBox -> CCheckListBox(需要手动完成)。

//修改控件变量类型:CListBox -> CCheckListBoxCCheckListBox m_checkListBox1;

  • 方式二:

2.从MFC类CCheckListBox中继承出类CCheckListBoxEx,定义其对象m_checkListBox2;通过m_checkListBox2.SubclassDlgItem(IDC_LIST2, this);子类化ListBox控件(IDC_LIST2)

ListBox控件父窗口头文件中

//定义自定义类CCheckListBoxEx的类对象CCheckListBoxEx m_checkListBox2;

初始化函数OnInitDialog中

// TODO: 在此添加额外的初始化代码m_checkListBox2.SubclassDlgItem(IDC_LIST2, this);


3.以上带有复选框的ListBox就完成了;但是此时ListBox控件中复选框和项目结合不紧密。

选中复选框 ==  选中了复选框所在的项目

选中项目 !== 选中了项目复选框


现对于ListBox控件(IDC_LIST2)做了进一步优化;使得可以

选中复选框 ==  选中了复选框所在的项目

选中项目 == 选中了项目复选框


优化源码:

消息映射

ON_LBN_SELCHANGE( IDC_LIST2, OnSelectItemChance )

消息函数申明

afx_msg void OnSelectItemChance();

消息函数定义

//当Item发生改变时系统调用此函数void CCheckListBoxDlg::OnSelectItemChance(){//ListBox中当前Item的索引取得int nCurIndex = m_checkListBox2.GetCurSel();//当前Item中复选框状态取得(选中,未选中)int nRet = m_checkListBox2.GetCheck(nCurIndex);if (nRet == BST_CHECKED){//选中时,状态改为非选中m_checkListBox2.SetCheck(nCurIndex, 0);}else{//未选中时,状态改为选中m_checkListBox2.SetCheck(nCurIndex, 1);}}

4.效果图:

图2




P.S文章源码下载

0 0
原创粉丝点击