MFC 单文档应用程序 CListView 以管理系统为例

创建MFC 应用程序
在这里插入图片描述
在这里插入图片描述

CListView中内置了CListCtrl,所以对CListView的操作实际上就是对内置CListCtrl的操作

给C管理系统View类添加成员变量

CListCtrl& m_list;

在构造函数中得到内置的listctrl引用

m_list = GetListCtrl();//得到内置的listctrl引用

在OnInitialUpdate()方法中进行初始化操作,设置列表风格和添加列

	m_list.ModifyStyle(0, LVS_REPORT);
	m_list.SetExtendedStyle(LVS_EX_FULLROWSELECT |
		LVS_EX_GRIDLINES);
	m_list.SetBkColor(RGB(200, 200, 200)); //设置背景颜色
	m_list.SetTextBkColor(RGB(200, 200, 200)); //设置文本背景颜色
	m_list.SetTextColor(RGB(10, 10, 80)); //设置文本颜色
	CRect rect;
	GetClientRect(&rect);
	m_list.InsertColumn(0, L"学号", LVCFMT_LEFT,100);
	m_list.InsertColumn(1, L"姓名", LVCFMT_LEFT,100);
	m_list.InsertColumn(2, L"年龄", LVCFMT_LEFT,100);
	m_list.InsertColumn(3, L"成绩", LVCFMT_LEFT,100);

效果如下
在这里插入图片描述

添加菜单项
在这里插入图片描述
在这里插入图片描述
修改添加的菜单项的ID
添加 ID_EDIT_ADD
修改 ID_EDIT_MODIFY
删除 ID_EDIT_DELETE
存储 ID_OP_STORE
读取 ID_OP_READ
添加菜单项的消息响应
右击菜单项-》添加事件处理程序
在这里插入图片描述
类列表中选择C管理系统View就可以了,在这三个类中View是最先相应的
添加对话框
添加两个对话框分别用来添加学生信息,修改学生信息
在这里插入图片描述
将添加按钮的ID修改为ID_BTN_ADD
将修改按钮的ID修改为ID_BTN_MODIFY
双击按钮即可添加消息响应函数

为对话框创建类 右击对话框-》添加类(CAddDlg和CModifyDlg)

在这里插入图片描述

给edit控件添加关联变量 右击对应的文本编辑框-》添加变量

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
实现添加功能
添加菜单项消息响应函数

void C管理系统View::OnEditAdd()
{
	// TODO: 在此添加命令处理程序代码
	CAddDlg dlg;
	if (IDCANCEL == dlg.DoModal())
		return;
	CString str;
	str.Format(L"%d", dlg.m_StuNo);
	int nCnt = m_list.GetItemCount();
	m_list.InsertItem(nCnt, str);
	m_list.SetItemText(nCnt, 1, dlg.m_StuName);
	str.Format(L"%d", dlg.m_StuAge);
	m_list.SetItemText(nCnt, 2, str);
	str.Format(L"%d", dlg.m_StuScore);
	m_list.SetItemText(nCnt, 3, str);
}

添加按钮按下响应函数

void CAddDlg::OnBnClickedBtnAdd()
{
	// TODO: 在此添加控件通知处理程序代码
	UpdateData(true);
	EndDialog(IDOK);
}

实现修改功能
修改菜单项消息响应函数

void C管理系统View::OnEditModify()
{
	// TODO: 在此添加命令处理程序代码
	POSITION pos = m_list.GetFirstSelectedItemPosition();
	int nSel = m_list.GetNextSelectedItem(pos);
	if (nSel < 0)
	{
		MessageBox(L"请选择后再修改");
		return;
	}
	CModifyDlg dlg;
	
	dlg.m_StuNo = _wtoi(m_list.GetItemText(nSel, 0));
	dlg.m_StuName =m_list.GetItemText(nSel, 1);
	dlg.m_StuAge = _wtoi(m_list.GetItemText(nSel, 2));
	dlg.m_StuScore = _wtoi(m_list.GetItemText(nSel, 3));
	
	if (IDCANCEL == dlg.DoModal())
		return;
		
	CString str;
	str.Format(L"%d", dlg.m_StuNo);
	m_list.SetItemText(nSel, 0, str);
	m_list.SetItemText(nSel, 1, dlg.m_StuName);
	str.Format(L"%d", dlg.m_StuAge);
	m_list.SetItemText(nSel, 2, str);
	str.Format(L"%d", dlg.m_StuScore);
	m_list.SetItemText(nSel, 3, str);
	
}

按下修改按钮响应函数

void CModifyDlg::OnBnClickedBtnModify()
{
	// TODO: 在此添加控件通知处理程序代码
	UpdateData(true);
	EndDialog(IDOK);
}

实现删除功能

void C管理系统View::OnEditDelete()
{
	// TODO: 在此添加命令处理程序代码
	POSITION pos = m_list.GetFirstSelectedItemPosition();
	int nSel = m_list.GetNextSelectedItem(pos);
	if (nSel < 0)
	{
		MessageBox(L"请选择后再删除");
		return;
	}
	m_list.DeleteItem(nSel);
}

文件操作使用了文档串形化

实现存储功能

void C管理系统View::OnSave()
{
	// TODO: 在此添加命令处理程序代码
	CFile file;
	file.Open(L"stu.txt", CFile::modeCreate | CFile::modeWrite);

	CArchive ar(&file, CArchive::store);
	
	int nCnt = m_list.GetItemCount();

	ar << nCnt;

	for (int i = 0; i < nCnt; i++) {
		UINT nStuNo = _wtoi(m_list.GetItemText(i, 0));
		CString strName = m_list.GetItemText(i, 1);
		UINT nSex = _wtoi(m_list.GetItemText(i, 2));
		UINT nScore = _wtoi(m_list.GetItemText(i, 3));
		
		ar << nStuNo;
		ar << strName;
		ar << nSex;
		ar << nScore;
	}
	ar.Close();
	file.Close();

}

实现读取功能

void C管理系统View::OnRead()
{
	// TODO: 在此添加命令处理程序代码
	CFile file;
	file.Open(L"stu.txt",  CFile::modeRead);

	CArchive ar(&file, CArchive::load);

	int nCnt ;

	ar >> nCnt;

	for (int i = 0; i < nCnt; i++) {
		UINT nStuNo, nSex, nScore;
		CString strName;

		ar >> nStuNo;
		ar >> strName;
		ar >> nSex;
		ar >> nScore;

		CString str;
		str.Format(L"%d", nStuNo);
		m_list.InsertItem(i, str);
		m_list.SetItemText(i, 1, strName);
		
		str.Format(L"%d", nSex);
		m_list.SetItemText(i, 2, str);
		str.Format(L"%d", nScore);
		m_list.SetItemText(i, 3, str);
	}
	ar.Close();
	file.Close();
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值