【简单实现显示功能】

先上图,基本功能实现就是这样一个状态,后面我会在陆续添加一些属性及功能,先记录一下实现的步骤

 

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 控件实例

                MFC List Control整行选中及其他相关技巧

 

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐