mfc之ListBox介绍

listbox窗口用来列出一系列的文本,每条文本占一行。创建一个列表窗口可以使用成员函数:

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

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值