Visual C++ MFC - CListBox - Multiple Selection Items Iteration
We have seen how to add items to MFC list box control in the section – MFC CListBox Adding String.
We have seen how to add items to MFC list box control in the section - CListBox AddString. If multiple selection option is enabled, then we need to iterate through all selected items one by one.
In OnBnClickedOk() function, CListBox::GetSelCount() is used to get the selection count. GetSelItems(...) is used to get the collection of selected indexes in the listbox. Once we get the selected index collection, we can walk through using a simple for loop and CListBox::GetText(...) function.
Source Code
class CMyTestDlg : public CDialog
{
public:
CMyTestDlg(CWnd* pParent = NULL); // standard constructor
enum { IDD = IDD_MYTEST_DIALOG };
protected:
virtual void DoDataExchange(CDataExchange* pDX);
public:
CListBox m_listBox;
afx_msg void OnBnClickedOk();
afx_msg void OnLbnDblclkList1();
};
void CMyTestDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_LIST1, m_listBox);
}
BOOL CMyTestDlg::OnInitDialog()
{
CDialog::OnInitDialog();
m_listBox.AddString("ONE");
m_listBox.AddString("TWO");
m_listBox.AddString("THREE");
m_listBox.AddString("FOUR");
m_listBox.AddString("FIVE");
return TRUE; // return TRUE unless you set the focus to a control
}
void CMyTestDlg::OnLbnDblclkList1()
{
int row = m_listBox.GetCurSel();
if(row < 0)
return;
CString s1;
m_listBox.GetText(row, s1);
MessageBox(s1);
}
void CMyTestDlg::OnBnClickedOk()
{
// Works for multiple selection
int count = m_listBox.GetSelCount();
int *lp = new int[1025];
int count2 = m_listBox.GetSelItems(1024, lp);
for(int i = 0; i < count2; i++)
{
CString str;
m_listBox.GetText(lp[i], str);
MessageBox(str);
}
OnOK();
}
Click here to download the VC++ Project and Executable
Output
|