MFC-列表控件的使用(报表风格)

(1)创建一个对话框应用程序,其主界面如图1所示。

MFC列表控件

图1  主界面

(2)设计一个如图2所示的“学生课程成绩”对话框,创建并完善该对话框类course。 

MFC列表控件

图2 “学生课程成绩”对话框

(3)实现功能:单击主界面中的“学生课程成绩”按钮,弹出“学生课程成绩”对话框,单击“添加”按钮,学生课程成绩添加到列表控件。若选中列表项,“修改”按钮由原来的禁用变成可用,单击“修改”按钮,则弹出的“学生课程成绩”对话框中的“添加”按钮标题变成“修改”,单击“学生课程成绩”对话框中的“修改”按钮,该列表项的内容被修改。

MFC列表控件

(4)添加一个“删除”按钮,若选中列表项,“删除”按钮由原来的禁用变成可用,单击“删除”按钮,删除选中的列表项。

解答:

1、利用MFC可视化编辑器完成主界面的设计,并为列表控件绑定CListCtrl类型的变量m_ListCtrl,将列表控件设置为report风格,即view属性为report。

2、切换到资源视图,在Dialog中插入新的对话框,即学生课程成绩对话框,完成该对话框的界面设计。

3、为“学生课程成绩”对话框添加类,基类为CDialog,类名为course。

4、为学号、课程号、成绩、学分编辑框分别绑定类型为CString的变量stu_num、course_num、score、credit。

5、为了实现单击“修改”按钮,弹出的“学生课程成绩”对话框中的“添加”按钮标题变成“修改”,我们在course类中添加一个public变量:

CString add_change_caption;

用来设定按钮标题。

6、重写course类的OnInitDialog()函数,方法见:

http://www.icoder.top/blog/index.php/2017/06/08/mfc-control-application/

BOOL course::OnInitDialog()
{
	CDialog::OnInitDialog();

	// TODO:  在此添加额外的初始化
        ///将按钮标题设置为添加/修改
	GetDlgItem(IDOK)->SetWindowTextW(add_change_caption); 
        //添加此句的原因是点击“修改”按钮时可以将选中数据变为编辑框初始数据
	UpdateData(FALSE);  
	return TRUE;  // return TRUE unless you set the focus to a control
				  // 异常: OCX 属性页应返回 FALSE
}

7、为“添加/修改”按钮添加事件处理程序:

void course::OnBnClickedOk()
{
	// TODO: 在此添加控件通知处理程序代码
	UpdateData(TRUE);
	CDialog::OnOK();
}

8、回到主界面,为主对话框类(此处为CControlEx5Dlg)添加两个public变量:

int i; //记录总行数
int j; //记录被选中的数据行的索引

注:也可以不添加者两个变量,用m_ListCtrl.GetItemCount()获取总行数,用this->m_ctrList.GetNextItem(-1, LVNI_SELECTED)获取列表控件中被选中的数据行索引。

9、在OnInitDialog()函数中添加初始化代码:

i = 0;
j = 0;
GetDlgItem(IDC_BUTTON2)->EnableWindow(FALSE);     //使修改按钮为不可选状态
GetDlgItem(IDC_BUTTON3)->EnableWindow(FALSE);     //使删除按钮为不可选状态

//设置列表控件风格为网格线,选中高亮
m_ctrList.SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES); 

//设置表头
CString strHeader[4] = { L"学号",L"课程",L"成绩",L"学分" };
for (int nCol = 0; nCol < 4; nCol++)
{
	m_ListCtrl.InsertColumn(nCol, strHeader[nCol], LVCFMT_LEFT, 130);
		
}

10、为列表控件添加事件处理程序,消息类型为LVN_ITEMCHANGED

void CControlEx5Dlg::OnLvnItemchangedList1(NMHDR *pNMHDR, LRESULT *pResult)
{
	LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);
	// TODO: 在此添加控件通知处理程序代码
	GetDlgItem(IDC_BUTTON2)->EnableWindow(TRUE);     //使修改按钮为可选状态
	GetDlgItem(IDC_BUTTON3)->EnableWindow(TRUE);     //使删除按钮为可选状态
	j = pNMLV->iItem;
	*pResult = 0;
}

11、为学生课程成绩按钮添加事件处理程序,消息类型为BN_CLICKED。

void CControlEx5Dlg::OnBnClickedButton1()
{
	// TODO: 在此添加控件通知处理程序代码
	course dlg;
	dlg.add_change_caption = L"添加";
	if (dlg.DoModal() == IDOK)
	{	
		m_ListCtrl.InsertItem(i, dlg.stu_num);     //插入一行,并设置该行第一个数据
		m_ListCtrl.SetItemText(i, 1, dlg.course_num); //设置第0行第1列数据
		m_ListCtrl.SetItemText(i, 2, dlg.score);
		m_ListCtrl.SetItemText(i, 3, dlg.credit);
		i++;
	}	
}

12、为修改按钮添加事件处理程序,消息类型为BN_CLICKED。

void CControlEx5Dlg::OnBnClickedButton2()
{
	// TODO: 在此添加控件通知处理程序代码
	course dlg;
	dlg.add_change_caption = L"修改";

	//设置模态框的初始数据为选中的数据
	dlg.stu_num = m_ListCtrl.GetItemText(j, 0);
	dlg.course_num = m_ListCtrl.GetItemText(j, 1);
	dlg.score = m_ListCtrl.GetItemText(j, 2);
	dlg.credit = m_ListCtrl.GetItemText(j, 3);

	if (dlg.DoModal() == IDOK)
	{
		m_ListCtrl.DeleteItem(j);
		m_ListCtrl.InsertItem(j - 1, dlg.stu_num);
		m_ListCtrl.SetItemText(j - 1, 1, dlg.course_num);;
		m_ListCtrl.SetItemText(j - 1, 2, dlg.score);
		m_ListCtrl.SetItemText(j - 1, 3, dlg.credit);
	}
}

13、为删除按钮添加事件处理程序,消息类型为BN_CLICKED。

void CControlEx5Dlg::OnBnClickedButton3()
{
	// TODO: 在此添加控件通知处理程序代码
	m_ListCtrl.DeleteItem(j);
	i--;
}

完成。

  • 7
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
### 回答1: MFC 中的列表控件是一个非常常用的控件,可以用来显示和编辑大量的数据。下面是一个简单的 MFC 列表控件使用实例: 1. 创建一个对话框,并在上面添加一个列表控件控件。 2. 在对话框类的头文件中添加以下代码: ```cpp #include <afxcmn.h> class CMyDlg : public CDialogEx { public: CMyDlg(CWnd* pParent = nullptr); enum { IDD = IDD_MY_DIALOG }; private: CListCtrl m_listCtrl; }; ``` 3. 在 OnInitDialog 函数中对列表控件进行初始化: ```cpp BOOL CMyDlg::OnInitDialog() { CDialogEx::OnInitDialog(); // 添加列 m_listCtrl.InsertColumn(0, _T("姓名"), LVCFMT_LEFT, 100); m_listCtrl.InsertColumn(1, _T("年龄"), LVCFMT_LEFT, 100); // 添加行 m_listCtrl.InsertItem(0, _T("张三")); m_listCtrl.SetItemText(0, 1, _T("20")); m_listCtrl.InsertItem(1, _T("李四")); m_listCtrl.SetItemText(1, 1, _T("25")); // 设置风格 m_listCtrl.SetExtendedStyle(m_listCtrl.GetExtendedStyle() | LVS_EX_FULLROWSELECT); return TRUE; } ``` 4. 编译并运行程序,即可看到列表控件中显示了两行数据,每行有两列。 以上就是一个简单的 MFC 列表控件使用实例。需要注意的是,列表控件还可以进行更多的高级操作,比如排序、编辑、拖放等。如果需要进行更复杂的操作,可以参考 MFC 文档或在网上查找相关资料。 ### 回答2: MFC(Microsoft Foundation Classes)是一套由微软提供的C++编程类库,用于开发Windows桌面应用程序。其中包含了许多常用的控件,例如列表控件List Control)。 列表控件是一个显示数据列表的窗口部件,以表格的形式展示数据。我们可以在MFC应用程序中使用列表控件来显示和编辑数据,如需使用列表控件,我们可以按照以下步骤进行操作: 1. 创建一个MFC应用程序并打开资源视图。 2. 在资源视图中选择对话框,并双击以打开对话框设计视图。 3. 在对话框中插入一个列表控件。可以在工具箱中找到列表控件,并将其拖拽到对话框上。 4. 双击列表控件以进入其属性界面。在属性页中,我们可以设置列表控件的样式、布局和其他属性,如行数、列数、标题等。 5. 在应用程序的视图类中,打开对话框类的.cpp文件。可以在OnInitDialog()函数中编写如下代码来初始化列表控件: ```cpp // 获取列表控件对象指针 CListCtrl* pListCtrl = (CListCtrl*)GetDlgItem(IDC_LIST1); // 设置列表控件为报告视图 pListCtrl->ModifyStyle(0, LVS_REPORT); // 插入列 pListCtrl->InsertColumn(0, _T("列1"), LVCFMT_LEFT, 100); pListCtrl->InsertColumn(1, _T("列2"), LVCFMT_LEFT, 100); // 插入行 pListCtrl->InsertItem(0, _T("数据1")); pListCtrl->SetItemText(0, 1, _T("数据2")); ``` 这段代码将列表控件设置为报告视图并插入了两列,并在第一行插入了数据。你可以根据自己的需求进行修改。 6. 运行应用程序,你将看到一个显示有数据的列表控件。你可以使用列表控件的其他成员函数来增加、删除、编辑和获取列表中的数据。 总结而言,使用MFC中的列表控件需要进行资源的设计和对控件的属性设置,然后在视图类中初始化和操作列表控件即可。通过这些步骤,我们可以方便地在MFC应用程序中使用列表控件来展示和操作数据。 ### 回答3: MFC(Microsoft Foundation Classes)是一套用于开发Windows桌面应用程序的C++编程框架。列表控件MFC中一个常用的控件,用于显示和管理一组数据。 使用MFC列表控件的实例可以包括以下几个步骤: 1. 创建列表控件: 在MFC应用程序中,可以通过资源视图中的控件编辑器来添加列表控件。也可以在代码中调用列表控件的Create函数动态创建。创建列表控件时,需要设置控件的样式和属性,如多选或单选、排序等。 2. 添加列标题: 通过列表控件的InsertColumn函数,可以添加列标题。可以为每个列指定标题文本和宽度等属性,以便用户能够区分和查看列表中的数据。 3. 添加列表项: 通过列表控件的InsertItem函数,可以添加列表项。可以为每个列表项设置图标、文本和子项等属性。列表项可以根据需要进行增删改查操作。 4. 添加子项: 通过列表控件的SetItemText函数,可以为列表项添加子项。子项可以存储更多的数据,如日期、价格等。可以为每个子项设置文本和自定义格式。 5. 响应用户交互: 可以在代码中为列表控件注册相应的消息响应函数,如双击列表项触发的消息、拖拽列表项触发的消息等。通过这些函数,可以实现列表控件的各种交互和操作。 6. 数据管理: 可以通过代码操作列表控件中的数据,如获取选择的列表项、修改列表项的文本等。还可以通过数据结构或数据源来管理列表控件中的数据,如从数据库读取数据并显示在列表中。 通过以上步骤,就可以使用MFC列表控件在应用程序中展示和管理一组数据。列表控件在实际应用中非常常见,可用于显示文件列表、日程安排、任务状态等各种信息。可以根据需要进行自定义,满足不同应用场景的需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

洒满阳光的午后

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值