VS MFC之List Control控件的使用
先上图,基本功能实现就是这样一个状态,后面我会在陆续添加一些属性及功能,先记录一下实现的步骤1.新建一个工程文件,在界面上新建一个“List Control”控件,首先把它的“View”设置为“Report(报表)”模式,这个很重要,要不然到时候什么也不会显示,也不会报错2.为这个“List Control”控件关联“CListCtrl”类型变量,然后在这个工程文件的“*Dlg.c...
【简单实现显示功能】
先上图,基本功能实现就是这样一个状态,后面我会在陆续添加一些属性及功能,先记录一下实现的步骤
1.新建一个工程文件,在界面上新建一个“List Control”控件,首先把它的“View”设置为“Report(报表)”模式,这个很重要,要不然到时候什么也不会显示,也不会报错
2.为这个“List Control”控件关联“CListCtrl”类型变量m_StuInformation,然后在这个工程文件的“*Dlg.cpp”文件的初始化函数“OnInitDialog()”中添加如下代码(如果是在原有的工程文件上又新建的界面的话,可以直接把原工程文件“*Dlg.cpp”里面的“OnInitDialog()”初始化函数复制粘贴一份到自己新建的这个Dialog界面的“*Dlg.cpp”文件中,把会报错的一些语句直接删除即可)
m_StuInformation.SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES); // 整行选择、网格线
m_StuInformation.InsertColumn(0, _T("学号"), LVCFMT_LEFT, 100); // 插入第2列的列名
m_StuInformation.InsertColumn(1, _T("姓名"), LVCFMT_LEFT, 100); // 插入第3列的列名
m_StuInformation.InsertColumn(2, _T("性别"), LVCFMT_LEFT, 100); // 插入第4列的列名
m_StuInformation.InsertColumn(3, _T("语文"), LVCFMT_LEFT, 100); // 插入第5列的列名
m_StuInformation.InsertColumn(4, _T("数学"), LVCFMT_LEFT, 100); // 插入第6列的列名
m_StuInformation.InsertColumn(5, _T("英语"), LVCFMT_LEFT, 100); // 插入第7列的列名
设置行高
CImageList m_l;
m_l.Create(1,25,TRUE|ILC_COLOR32,1,0); //设置表格的高度
m_StuInformation.SetImageList(&m_l,LVSIL_SMALL);
设置字体
CFont m_font;
m_font.CreatePointFont(140, "新宋体"); //设置标题栏的高度及字体
m_StuInformation.SetFont(&m_font);
m_StuInformation.SetColumnWidth (0,120); //设置列宽
m_StuInformation.SetColumnWidth (1,120);
m_StuInformation.SetColumnWidth (2,80);
m_StuInformation.SetColumnWidth (3,80);
m_StuInformation.SetColumnWidth (4,80);
m_StuInformation.SetColumnWidth (5,80);
for (int i=0;i<1;i++)
{ //不断获取下一组结果
Str_StuId ="1002020001";
Str_Name = "王一";
Str_Gene = "男";
Str_Chinese.Format(_T("%d"), 120);
Str_Math.Format(_T("%d"), 121);
Str_English.Format(_T("%d"), 122);
m_StuInformation.InsertItem(i, _T("")); // 插入行
m_StuInformation.SetItemText(i, 0, Str_StuId); // 设置第2列(学号)
m_StuInformation.SetItemText(i, 1, Str_Name); // 设置第3列(姓名)
m_StuInformation.SetItemText(i, 2, Str_Gene); // 设置第4列(性别)
m_StuInformation.SetItemText(i, 3, Str_Chinese); // 设置第5列(语文)
m_StuInformation.SetItemText(i, 4, Str_Math); // 设置第6列(数学)
m_StuInformation.SetItemText(i, 5, Str_English); // 设置第7列(英语)
list_row++; //list_row为list Ctrl表格中显示的数据的行数,便于后期操作,在头文件中定义
}
3.其中把变量m_StuInformation,list_row及Str_StuId,Str_Name,Str_Gene,Str_Chinese,Str_Math,Str_English定义在stdafx.h和stdafx.cpp中,定义为整个工程文件的全局变量,方便功能扩展。
【右键单击弹出菜单,实现增加、修改、删除数据】
1.首先新建一个菜单,如下
2.为表格添加右键单击菜单响应程序,
3.点击“添加编辑”,自动添加程序框架,如下
在程序中添加如下代码:
void CListCtrlDlg::OnNMRClickList1(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);
// TODO: 在此添加控件通知处理程序代码
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
if (pNMListView->iItem != -1)
{
CPoint pt;
GetCursorPos(&pt);
CMenu menu;
menu.LoadMenu(IDR_MENU1);
CMenu *popmenu;
popmenu = menu.GetSubMenu(0);
popmenu->TrackPopupMenu(TPM_RIGHTBUTTON, pt.x, pt.y, this);
}
*pResult = 0;
}
再为每个右键后的菜单选项添加事件处理程序
点击添加编辑后的程序如下:
增加方法及程序:
实现方法:点击“增加”后,弹出一个“增加信息”界面,输入信息点击确定后,在原来的界面显示出来
1.首先新建一个dialog文件,并为其添加类
2.在主程序ListCtrlDlg.cpp中包含刚才添加的“添加信息”界面的类文件的头文件,并在刚才的增加对应的事件处理程序中添加如下代码:
增加
void CListCtrlDlg::OnFile32772()
{
// TODO: 在此添加命令处理程序代码
CAddDlg m;
m.DoModal();
}
实现效果如下:
在“添加信息”界面上添加如下所示的控件,选中控件,右键“类向导”为文本编辑框关联变量如下:
在“确定”按钮中添加如下代码:
void CAddDlg::OnBnClickedOk()
{
// TODO: 在此添加控件通知处理程序代码
UpdateData(TRUE);
CDialogEx::OnOK();
//将增加的数据显示到listCtrl中
Str_StuId = m_Add_id;
Str_Name = m_Add_name;
Str_Gene = m_Add_gene;
Str_Chinese = m_Add_Chinese;
Str_Math = m_Add_math;
Str_English = m_Add_English;
m_StuInformation.InsertItem(list_row, _T("")); // 插入行
m_StuInformation.SetItemText(list_row, 0, Str_StuId); // 设置第2列(学号)
m_StuInformation.SetItemText(list_row, 1, Str_Name); // 设置第3列(姓名)
m_StuInformation.SetItemText(list_row, 2, Str_Gene); // 设置第4列(性别)
m_StuInformation.SetItemText(list_row, 3, Str_Chinese); // 设置第5列(语文)
m_StuInformation.SetItemText(list_row, 4, Str_Math); // 设置第6列(数学)
m_StuInformation.SetItemText(list_row, 5, Str_English); // 设置第7列(英语)
list_row++; //list_row为list Ctrl表格中显示的数据的行数,便于后期操作,在头文件中定义
}
实现效果如下:
删除程序如下:
删除
void CListCtrlDlg::OnFile32774()
{
// TODO: 在此添加命令处理程序代码
int i, iState;
int nItemSelected = m_StuInformation.GetSelectedCount();
int nItemCount = m_StuInformation.GetItemCount();
if (nItemSelected < 1)
return;
for (i = nItemCount - 1; i >= 0; i--)
{
iState = m_StuInformation.GetItemState(i, LVIS_SELECTED);
if (iState != 0)
{
m_StuInformation.DeleteItem(i);
}
}
}
工程文件链接:VS2010 MFC之List Control控件的使用
参考链接:MFC实例:[4] List Control 控件实例
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)