CListBox用法总结
 用法
 属性Style
 Selection
 Single — 单选
 Multiple — 多选(LBS_MULTIPLESEL)
 None — 不可选(LBS_NOSEL)
 Sort
 对应Style: LBS_SORT
Insert Item
 int AddString(LPCTSTR lpszItem);
 int InsertString(int nIndex,
 LPCTSTR lpszItem);
Delete Item
 int DeleteString(UINT nIndex);
 //清空
 void ResetContent();
Selection
 int GetCurSel( ) const;
 int SetCurSel(int nSelect);
 int GetSelCount( ) const;
 int GetSelItems(int nMaxItems,
 LPINT rgIndex) const;
 代码示例:获取选中项并输出
 假设CListBox控件变量名为m_lbTest
 // 1.Selection = Single-----------------------------------
 int nSelIndex = m_lbTest.GetCurSel();
 if (nSelIndex == LB_ERR) //no item is currently selected
 {
 AfxMessageBox(TEXT(“no item is currently selected”));
 }
 else
 {
 CString cstr;
 m_lbTest.GetText(nSelIndex, cstr);
 AfxMessageBox(cstr);
 }
// 2.Selection = Multiple----------------------------------
 int nSelCnt = m_lbTest.GetSelCount();
 if (nSelCnt == LB_ERR) //the list box is a single-selection list box
 {
 AfxMessageBox(TEXT(“the list box is a single-selection list box”));
 return;
 }
 if (nSelCnt == 0) //no item is currently selected
 {
 AfxMessageBox(TEXT(“no item is currently selected”));
 return;
 }
 int* pnSelIndex = new int[nSelCnt];
 m_lbTest.GetSelItems(nSelCnt, pnSelIndex);
 for (int i=0; i<nSelCnt; ++i)
 {
 CString cstr;
 m_lbTest.GetText(pnSelIndex[i], cstr);
 AfxMessageBox(cstr);
 }
 delete[] pnSelIndex;
Other
 // 获取Text
 void GetText(int nIndex,
 CString& rString) const;
 // Get/Set item associated data
 DWORD_PTR GetItemData(int nIndex) const;
 int SetItemData(int nIndex,
 DWORD_PTR dwItemData);
 注意:
 1.GetItemData在没有通过SetItemData设置每一项的关联数据时返回NULL.
 2.对应的GetItemDataPtr,SetItemDataPtr其实和GetItemData,SetItemData本质上是一模一样的
 我们可以看下源码
 int CListBox::SetItemDataPtr(int nIndex, void* pData)
 { return SetItemData(nIndex, (DWORD_PTR)(LPVOID)pData); }
 看来增加这两个函数只是使意义更明确些,有点不懂微软了。
动态创建CListBox控件
 黑色非标准3D边框:
 CListBox *pMyListBox = new CListBox();
 pMyListBox->Create(
 WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_BORDER | LBS_NOTIFY | LBS_MULTIPLESEL,
 CRect(10, 10, 100, 100),
 this,
 1234);
 pMyListBox->SetFont(this->GetFont());
pMyListBox->AddString(TEXT(“123”));
 pMyListBox->AddString(TEXT(“456”));
 pMyListBox->AddString(TEXT(“789”));
标准3D边框:
 CListBox *pMyListBox = new CListBox();
 pMyListBox->CreateEx(
 WS_EX_CLIENTEDGE,
 TEXT(“LISTBOX”),
 TEXT(""),
 WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_BORDER | LBS_NOTIFY | LBS_MULTIPLESEL,
 10, 10, 100, 100,
 this->GetSafeHwnd(),
 (HMENU)1234);
 pMyListBox->SetFont(this->GetFont());
pMyListBox->AddString(TEXT(“123”));
 pMyListBox->AddString(TEXT(“456”));
 pMyListBox->AddString(TEXT(“789”));