组合框和列表框
combobox和com
demo
基于对话框,后面全是默认设置
一直下一步,完成即可
修改二者的id
所有组合框和列表框都有一个索引,都是从0开始的
列表框控件
自带排序
只要大于-1,就是有当前选中的
给两个按钮添加点击事件
增加按钮
void CdemoDlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
CString strText;
GetDlgItemText(IDC_EDT_TEXT,strText);
m_cmb_demo.AddString(strText);
m_cmb_demo.SetCurSel(m_cmb_demo.GetCount()-1);//因为从0开始,所以最后一个是count-1,当前选中的是最后一个,即总个数减一
//添加后,默认是最后一个
m_lst_demo.AddString(strText);
m_lst_demo.SetCurSel(m_lst_demo.GetCount()-1);
}
删除按钮
void CdemoDlg::OnBnClickedButton2()
{
// TODO: 在此添加控件通知处理程序代码
int nIndex;
//组合框
nIndex = m_cmb_demo.GetCurSel();//得到索引 //每一项都会有一个索引
if(nIndex>-1)//说明有选中的项,下标从0开始,没有就是-1;
{
m_cmb_demo.DeleteString(nIndex);
if(nIndex<m_cmb_demo.GetCount())
m_cmb_demo.SetCurSel(nIndex);//设当前选中的为下一项,删除第3项,则下一项又变成了第三项
else
m_cmb_demo.SetCurSel(0); //如果所删的元素后面没有了,那就选中设为第一项
}
//列表框
nIndex = m_lst_demo.GetCurSel(); //每一项都会有一个索引
if(nIndex>-1)//说明有选中的项,下标从0开始,没有就是-1;
{
m_lst_demo.DeleteString(nIndex);
if(nIndex<m_lst_demo.GetCount())
m_lst_demo.SetCurSel(nIndex);//设当前选中的为下一项,删除第3项,则下一项又变成了第三项
else
m_lst_demo.SetCurSel(0); //如果所删的元素后面没有了,那就选中设为第一项
}
//删的时候,两边都选
}
防止回车退出
void CdemoDlg::OnOK()
{
// TODO: 在此添加专用代码和/或调用基类
//CDialogEx::OnOK();
}
MFC中Listbox控件的简单使用
http://blog.sina.com.cn/s/blog_6ca43ae701019h8k.html
http://blog.csdn.net/winerdaxian/article/details/6560060
http://www.jizhuomi.com/software/186.html
https://my.oschina.net/ranjiewen/blog/781090
https://blog.csdn.net/chengke1866/article/details/100695768?utm_medium=distribute.pc_relevant.none-task-blog-title-3&spm=1001.2101.3001.4242
MFC中listbox控件是为了显示一系列的文本,每个文本占一行。
Listbox控件可以设置属性为:
LBS_CHILD :(默认)子窗口
LBS_Visible :(默认)可视
LBS_Multiplesel :可选择多行
LBS_Extendedsel :可以使用shift或ctrl选择多行
LBS_SORT:所有行按字母顺序进行排序
对Listbox进行操作:
Int listbox.AddString ( LPCTSTR Str) :对listbox的首行添加一个str的文本行,即此时nIndex为0;
Int listbox.DeleteString (uint nIndex) :删除listbox中第nIndex行的文本行,注意nIndex是从0起始的;
int listbox.InsertString (uint xIndex, LPCTSTR Str):在listbox中第nIndex行插入一个str的文本行;
Int listbox.GetCount ( ):获取listbox的行的总数目;
Int listbox.GetCurSel ( ):得到listbox选中的文本行的行数。
Void listbox.ResetContent ( ):清除listbox中的所有数据;
Int listbox.GetCurCount ( ):获取listbox被选中的行的数目;
Int listbox.FindString ( int nstart , LPCTSTR Str ):从第nstart行开始起进行查找,查找Str的文本行;
Int listbox.SelectString ( int nstart, LPCTSTR Str ) :从第nstart行开始,选择包含Str字符串的那一行;
对Listbox中某一行进行双击操作,要产生一个响应函数的步骤:
> 在 BEGIN_MESSAGE_MAP() END_MESSAGE_MAP() 之间添加响应函数的消息映射,如函数名为CDlg::OnLbnDblClk,添加下面代码
ON_LBN_DBLCLK(IDC_LIST1,&CDlg::OnLbnDblClk) //IDC_LIST1为listbox控件的ID
然后在CDlg.h中添加函数OnLbnDblClk()的声明 最后在CDlg::OnLbnDblClk()函数中添加实现代码即可
按照默认即可
之后双击,会定位到写代码的地方
c++mfclistbox双击事件
void CdemoDlg::OnLbnSelchangeListDemo()
{
//对每一行添加事件的方法
// 列表控件可以返回第几行,然后你可以通过行获得行内容。直接点击列表控件可添加点击事件。
//CString strText1;
//GetDlgItemText(IDC_LIST_DEMO,strText1);
MessageBox(_T("点击弹出一个框"));//弹出一个框
// MessageBox()
//列表框
//int nIndex1;
// nIndex1 = m_lst_demo.GetCurSel(); //每一项都会有一个索引
//m_lst_demo.DeleteString(nIndex1);
/*
if(nIndex1>-1)//说明有选中的项,下标从0开始,没有就是-1;
{
m_lst_demo.DeleteString(nIndex1);
if(nIndex1<m_lst_demo.GetCount())
m_lst_demo.SetCurSel(nIndex1);//设当前选中的为下一项,删除第3项,则下一项又变成了第三项
else
m_lst_demo.SetCurSel(0); //如果所删的元素后面没有了,那就选中设为第一项
}
*/
}