界面绘制

mfc对话框添加滑动控件(MFC组合框和列表框控件)(1)

编辑框ID:IDC_EDIT_INPUT_STRING,绑定数值类型变量:CString m_edit_input_string;

添加当前项按钮ID:IDC_BUTTON_ADD_STRING

删除选中项按钮ID:IDC_BUTTON_DEL_STRING

组合框ID:IDC_CBX,绑定控件类型变量:CComboBox m_cbx;

列表框ID:IDC_LST,绑定控件类型变量:m_lstbox;

列表框和组合框都取消默认排序,按照元素添加先后顺序排序。

mfc对话框添加滑动控件(MFC组合框和列表框控件)(2)

列表框设置为Extended模式,可以通过按住Ctrl键选择多项元素。

mfc对话框添加滑动控件(MFC组合框和列表框控件)(3)

添加元素

在编辑框中输入字符串,点击添加当前项按钮,分别将字符串添加至组合框和列表框,并设置当前选中项为新添加的元素。

添加之前,判断是否为空,且防止出现输出连续多个空格情况,使用Trim()方法去除字符串左右两端空格。

还需要进行去重判断,如果重复则不会添加至组合框。去重可以使用STL set集合,也可以直接使用FindString()方法查找是否已经存在过该元素。

void CDemoDlg::OnBnClickedButtonAddString() { UpdateData(TRUE); m_edit_input_string.Trim(); if (m_edit_input_string.IsEmpty()) { AfxMessageBox(_T("请先输入内容")); return; } int idx = -1; if (m_cbx.FindString(idx, m_edit_input_string) >= 0) { AfxMessageBox(_T("请不要重复插入相同值")); return; } m_cbx.AddString(m_edit_input_string); m_cbx.SetCurSel(m_cbx.GetCount() - 1); m_lstbox.AddString(m_edit_input_string); m_lstbox.SetCurSel(m_lstbox.GetCount() - 1); m_edit_input_string = _T(""); UpdateData(FALSE); }

删除选中项

对于组合框,每一次只删除当前选中的项目。如果删除最后一个项目,当前选中项设置为删除后的最后一项,即长度-1;如果删除的不是最后一项,后面的元素会自动上移,则当前选中项还是设置为删除之前的索引。

int cbx_idx = m_cbx.GetCurSel(); if (~cbx_idx) { m_cbx.DeleteString(cbx_idx); if (cbx_idx == m_cbx.GetCount()) m_cbx.SetCurSel(m_cbx.GetCount() - 1); else m_cbx.SetCurSel(cbx_idx); }

对于列表框,可以选择多项内容,获取选择的元素下标,再通过for循环从后向前遍历删除选中的元素。

int lstbox_count = m_lstbox.GetCount(); CArray<int> lstbox_sel_idxs; lstbox_sel_idxs.SetSize(lstbox_count); for (int i = 0; i < lstbox_count; i ) lstbox_sel_idxs[i] = -1; m_lstbox.GetSelItems(lstbox_count, lstbox_sel_idxs.GetData()); for (int i = lstbox_sel_idxs.GetCount() - 1; i >= 0; i--) { output_string.Format(_T("%d\n"), lstbox_sel_idxs[i]); OutputDebugString(output_string); if(~lstbox_sel_idxs[i]) m_lstbox.DeleteString(lstbox_sel_idxs[i]); }

相关推荐视频讲解

,