MFC,ListBox使用


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;
}

}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM