MFC 单文档应用程序 CViewList 以简单学生成绩管理系统为例

创建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();
}

发布于 2023-08-10 22:32・IP 属地江西