istBox窗口用來列出一系列的文本,每條文本占一行。創建一個列表窗口可以使用成員函數:
BOOL CListBox::Create( LPCTSTR lpszText, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID = 0xffff );
其中dwStyle將指明該窗口的風格,除了子窗口常用的風格WS_CHILD,WS_VISIBLE外,你可以針對列表控件指明專門的風格。
LBS_MULTIPLESEL 指明列表框可以同時選擇多行
LBS_EXTENDEDSEL 可以通過按下Shift/Ctrl鍵選擇多行
LBS_SORT 所有的行按照字母順序進行排序
在列表框生成后需要向其中加入或是刪除行,可以利用:
int AddString( LPCTSTR lpszItem )添加行,
int DeleteString( UINT nIndex )刪除指定行,
int InsertString( int nIndex, LPCTSTR lpszItem )將行插入到指定位置。
void ResetContent( )可以刪除列表框中所有行。
通過調用int GetCount( )得到當前列表框中行的數量。
如果需要得到/設置當前被選中的行,可以調用int GetCurSel( )/int SetCurSel(int iIndex)。如果你指明了選擇多行的風格,你就需要先調用int GetSelCount( )得到被選中的行的數量,然后int GetSelItems( int nMaxItems, LPINT rgIndex )得到所有選中的行,參數rgIndex為存放被選中行的數組。通過調用int GetLBText( int nIndex, LPTSTR lpszText )得到列表框內指定行的字符串。
此外通過調用int FindString( int nStartAfter, LPCTSTR lpszItem )可以在當前所有行中查找指定的字符傳的位置,nStartAfter指明從那一行開始進行查找。
int SelectString( int nStartAfter, LPCTSTR lpszItem )可以選中包含指定字符串的行。
最后介紹一下列表框幾種常用的消息映射宏:
ON_LBN_DBLCLK 鼠標雙擊
ON_EN_ERRSPACE 輸入框無法分配內存時產生
ON_EN_KILLFOCUS / ON_EN_SETFOCUS 在輸入框失去/得到輸入焦點時產生
ON_LBN_SELCHANGE 選擇的行發生改變
使用以上幾種消息映射的方法為定義原型如:afx_msg void memberFxn( );的函數,並且定義形式如ON_Notification( id, memberFxn )的消息映射。如果在對話框中使用列表框,Class Wizard會自動列出相關的消息,並能自動產生消息映射代碼。
GetDlgItem(IDC_LIST1)->EnableWindow(FALSE)提供控件的id.獲得指向控件的指針
是CWnd的成員函數
->ShowWindow(SW_SHOW)
->ShowWindow(SW_HIDE)顯示或隱藏窗口,也是CWnd的成員函數
CListBox::AddString()函數可以向列表框中添加項目
事例程序:
void COptionListDlg::OnAddButton()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
if(m_edit==""){
MessageBox("請輸入添加的數據");
return;
}
switch(m_radio){
case 0:
m_listbox1.AddString(m_edit);
break;
case 1:
m_listbox2.AddString(m_edit);
break;
case 2:
m_listbox3.AddString(m_edit);
break;
}
UpdateData(FALSE);
}
CListBox::GetCurSel()返回當前列表框選擇項目的序號
CListBox::GetText()函數可以根據當前列表框的序號讀取當前選擇的項目
程序:
void COptionListDlg::OnSelchangeList1()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
int index = m_listbox1.GetCurSel();
if(index == LB_ERR)
m_edit="";
else
m_listbox1.GetText(index,m_edit);
UpdateData(FALSE);
}
m_listbox1.DeleteString()
m_listbox1.InsertString()
程序:
void COptionListDlg::OnEditButton()
{
// TODO: Add your control notification handler code here
int index;
UpdateData(TRUE);
if(m_edit == ""){
MessageBox("請輸入修改項目");
return;
}
switch(m_radio){
case 0:
index = m_listbox1.GetCurSel();
if(index == LB_ERR){
MessageBox("請選擇要修改的項目");
return;
}
m_listbox1.DeleteString(index);
m_listbox1.InsertString(index,m_edit);
break;
case 1:
index = m_listbox2.GetCurSel();
if(index == LB_ERR){
MessageBox("請選擇要修改的項目");
return;
}
m_listbox2.DeleteString(index);
m_listbox2.InsertString(index,m_edit);
break;
case 2:
index = m_listbox3.GetCurSel();
if(index == LB_ERR){
MessageBox("請選擇要修改的項目");
return;
}
m_listbox3.DeleteString(index);
m_listbox3.InsertString(index,m_edit);
break;
}
}