Tab Control的一个运用

       Windows 窗体 TabControl 显示多个选项卡,这些选项卡类似于笔记本中的分隔卡和档案柜文件夹中的标签。选项卡中可包含图片和其他控件,使用TabControl 创建属性页。好了既然知道了它是什么样的以及可以做什么,那我们就去一瞧它的庐山真面目吧

       1),首先创建一个MFC对话框框架,在对话框资源上从工具箱中添加上一个Tab Control 控件,根据需要修改一下属性,然后右击控件,为这个控件添加一个control类型变量,得到 CTabCtrl m_CTable;

      2),创建三个新的对话框资源,其属性作如下修改:Border:none 边界为空,这样它就没了标题栏 Style :Child  这样这个模板就可以当作另一个窗口的子窗口了。

完成后从这三个对话框模板生成三个新的对话框类,他们分别是CDialog1,CDialog2,CDialog3.

     3),在主对话框中为新添加进来的两个类增加三个变量,代码如下:

	CDialog1 dlg1;
	CDialog2 dlg2;
	CDialog3 dlg3;


  4),在3个子对话框上分别添加一个Edit控件,分别修改第2,3个对话框上Edit的ID,修改为IDC_EDIT2,IDC_EDIT3,接着再分别为3个Edit控件关联一个int型的变量 分别为:int m_Dlg1,int m_Dlg2,int m_Dlg3;

  5),准备工作做得差不多了,下面我们进行初始化,在OnInitDialog()函数中添加以下代码:

         //初始化属性页
	m_CTable.InsertItem(0,_T("叶一"));
	m_CTable.InsertItem(1,_T("叶二"));
	m_CTable.InsertItem(2,_T("叶三"));
	//将新添加的3个Dlg资源和Tab关联起来
	dlg1.Create(IDD_DIALOG1, &m_CTable);
	dlg2.Create(IDD_DIALOG2, &m_CTable);
	dlg3.Create(IDD_DIALOG3, &m_CTable);
	//获得IDC_TAB1的客户区大小
 	CRect rect;
 	m_CTable.GetClientRect(&rect);
	rect.right -= 10;
	rect.bottom += 20;
	//将指定点,或者矩形的用户坐标转换成屏幕坐标
	ClientToScreen(rect);

	dlg1.MoveWindow(rect);
	dlg2.MoveWindow(rect);
	dlg3.MoveWindow(rect);
	dlg1.ShowWindow(SW_SHOW);
	dlg2.ShowWindow(SW_HIDE);
	dlg3.ShowWindow(SW_HIDE);

	//设置默认选项卡
	m_CTable.SetCurSel(0);


6), 为Dialog1类添加成员函数int GetValue() 代码如下:

 为Dialog1添加以下函数:

int CDialog1::GetValue()
{
	return m_Dlg1;
}
int CDialog2::GetValue()
{
	return m_Dlg2;
}
int CDialog3::GetParValue(int rest)
{
               m_Dlg3 = rest;
	return  rest;


7),为了切换页面,我们得为Tab 控件 响应TCN_SELCHANGES事件,添加函数OnTcnSelchangeTab1,我们得到如下函数代码:

void CSixDlg::OnTcnSelchangeTab1(NMHDR *pNMHDR, LRESULT *pResult)
{
	// TODO: Add your control notification handler code here
	int CurSel = m_CTable.GetCurSel();
	switch(CurSel)
		{
	case 0:
		dlg1.ShowWindow(true);
		dlg2.ShowWindow(false);
		dlg3.ShowWindow(false);
		break;
	case 1:
		dlg1.ShowWindow(false);
		dlg2.ShowWindow(true);
		dlg3.ShowWindow(false);
		break;
	case 2:
		dlg1.ShowWindow(false);
		dlg2.ShowWindow(false);
		dlg3.ShowWindow(true);
		break;
	default:
		;
	
	}
	*pResult = 0;
}


8),我们在主对话框上添加个Button按钮,实现叶一和叶二的数相加,这里用到了DDX/DDV机制(DDX_Text(pDX,IDC_EDIT1,m_Dlg1);),得到如下:

	void CSixDlg::OnBnClickedButton1()
	{
	
		dlg1.UpdateData(true);
		dlg2.UpdateData(true);
		dlg3.SetParValue(dlg1.GetParValue()+dlg2.GetParValue());
		dlg3.UpdateData(false);  
	}




最终实现如图:
 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值