MFC tab控件及list控件学习

本文基于上一案例在IDD_PANDALOG对话框中新增tab控件和两个对话框IDD_JILU和IDD_JISUAN,点击tab中的数据记录,显示对话框IDD_JILU,点击tab中的加法运算,显示对话框IDD_ JISUAN,对话框IDD_JILU中有list控件,点击记录可将滑块的数据记录到list中
在这里插入图片描述

对话框IDD_PANDALOG中的控件如下,添加变量CTabCtrl m_tabctrl;
在这里插入图片描述

对话框IDD_JILU的控件如下:添加变量CListCtrl m_list;,list的风格为report,按钮记录的ID为IDC_record,按钮删除的ID为IDC_delate

在这里插入图片描述
初始化表格,在BOOL jilu::OnInitDialog()中添加

 BOOL jilu::OnInitDialog()
{
	CDialogEx::OnInitDialog();

//	page11 = this;

	// TODO:  在此添加额外的初始化
	//扩展列表风格
	DWORD dwStyle = m_list.GetExtendedStyle();
	dwStyle |= LVS_EX_FULLROWSELECT;//选中某行高亮显示
	dwStyle |= LVS_EX_GRIDLINES; //开栅格
	m_list.SetExtendedStyle(dwStyle); 

	//便于理解
	CRect rect;
	m_list.GetWindowRect(&rect);
	m_list.InsertColumn(0,_T("数据"), LVCFMT_CENTER, rect.Width()/3, 0);
	m_list.InsertColumn(1,_T("x1"), LVCFMT_CENTER, rect.Width()/3, 1);
	m_list.InsertColumn(2,_T("x2"), LVCFMT_CENTER, rect.Width()/3, 2);



	return TRUE;  // return TRUE unless you set the focus to a control
	// 异常: OCX 属性页应返回 FALSE
}

对话框IDD_JISUAN的控件如下,此处控件随意,该对话框只起点击tab中的加法运算就显示该对话框的作用
在这里插入图片描述
在PANDALOG.h头文件中添加IDD_JILU和IDD_JISUAN的头文件及成员变量
#include “jilu.h” #include “jisuan.h” jilu page1; jisuan page2;
在panDALOG.cpp的OnInitDialog()添加以下代码:

    page1.DestroyWindow();
	page2.DestroyWindow();



	m_tabctrl.DeleteAllItems();
	TCITEM item;
	item.mask=TCIF_TEXT;
	item.pszText=_T("数据记录");
	m_tabctrl.InsertItem(0,&item);
	item.pszText=_T("加法运算");
	m_tabctrl.InsertItem(1,&item);

	m_tabctrl.SetCurSel(0);

	page1.Create(IDD_JILU,&m_tabctrl);
	page2.Create(IDD_JISUAN,&m_tabctrl);

	//画了个矩形框
	CRect rect;
	m_tabctrl.GetClientRect(&rect);//矩形框大小为m_tablectrl的大小

	//在原基础上把矩形框偏置
	rect.top += 30;
	rect.bottom -= 20;
	rect.left += 20;
	rect.right -= 30;

	page1.MoveWindow(&rect);
	page2.MoveWindow(&rect);	

	page1.ShowWindow(TRUE);


	m_tabctrl.SetCurSel(0);

添加tab控件的相应函数,实现点击tab上的按键,显示某对话框的功能

void panDALOG::OnTcnSelchangeTab1(NMHDR *pNMHDR, LRESULT *pResult)
{
	// TODO: 在此添加控件通知处理程序代码
	*pResult = 0;

	int cursel;
	cursel = m_tabctrl.GetCurSel();
	switch(cursel)
	{
	case 0:
		page1.ShowWindow(TRUE);
		page2.ShowWindow(FALSE);

		break;
	case 1:
		page1.ShowWindow(FALSE);
		page2.ShowWindow(TRUE);

		break;
	}


}

此时运行的效果应如下:
在这里插入图片描述
在这里插入图片描述
接着要将IDD_PANDALOG对话框中的滑块数值传递至IDD_JILU对话框中
在jilu.cpp中添加extern panDALOG* pandlg;,表示引用外部的指针,在jilu.cpp中添加头文件panDALOG.h (不要在jilu.h中添加该头文件,否则易引起头文件相互引用而报错)
对应的,在panDALOG.cpp中添加panDALOG* pandlg;,在初始化位置添加pandlg = this;
在jilu.cpp添加record和delate的响应函数

void jilu::OnBnClickedrecord()
{
	// TODO: 在此添加控件通知处理程序代码
	UpdateData(TRUE);
	/*int i=m_list.GetItemCount()+1;*/

	//获取行数
	int i=m_list.GetItemCount()+1; //初始时,,没有项 i= 0+1
	CString n;
	n.Format(_T("%d"),i);//插入数据前必须下开辟一个行,此时n = '1'
	m_list.InsertItem(i-1,n);//初始时在0行 插入序号‘1’

	CString num1;CString num2;
	double number1;
	double number2;
	number1 = pandlg->m_value;
	number2 = pandlg->m_value2;
	num1.Format(_T("%.2f"),number1);
	num2.Format(_T("%.2f"),number2);
	
	//插入表格
	m_list.SetItemText(i-1,1,num1);
	m_list.SetItemText(i-1,2,num2);
	

	UpdateData(FALSE);
}


void jilu::OnBnClickeddelate()
{
	// TODO: 在此添加控件通知处理程序代码
	UpdateData(TRUE);

	//点中后删除
	while(m_list.GetNextItem(-1,LVNI_ALL | LVNI_SELECTED) != -1)
	{
		int nItem = m_list.GetNextItem(-1,LVNI_ALL | LVNI_SELECTED);
		m_list.DeleteItem(nItem);
	}


	UpdateData(FALSE);
}

点击运行即可

猜你喜欢

转载自blog.csdn.net/weixin_42355349/article/details/82902742