VC中tab控件的使用

原文:http://blog.sina.com.cn/s/blog_6a06aec90100l3x6.html


Tab Control控件的应用

关于Tab Control控件的应用

首先,新建一个基于对话框的MFC应用程序,添加Tab Control控件,并为其添加变量CTabCtrl m_tab;

然后,新建两个对话框,均设置属性如下(这步很重要):Style--Child,Border--None 

分别为这两个对话框建立新类CPage1和CPage2。

该程序用了一个CDialog的指针数组来进行保存各个页面,数组的大小是Tab Control页面的个数,数组下标对应着每个页面的索引(这样方便快速存取)。 声明变量:CDialog *pDialog[2],包含CPage1,CPage2头文件并声明变量,CPage1 m_page1, CPage2 m_page2.并且添加一个int型变量用于保存当前活动的页面索引,int m_CurSelTab;

接着,在OnInitDialog函数中添加如下代码:

    //为Tab Control增加两个页面
    m_tab.InsertItem(0, _T("First"));
    m_tab.InsertItem(1, _T("Second"));

    //创建两个对话框
    m_page1.Create(IDD_DIALOG1, &m_tab);
    m_page2.Create(IDD_DIALOG2, &m_tab);

    //设定在Tab内显示的范围
    CRect rc;
    m_tab.GetClientRect(rc);
    rc.top += 20;
    rc.bottom -= 8;
    rc.left += 8;
    rc.right -= 8;

    m_page1.MoveWindow(&rc);
    m_page2.MoveWindow(&rc);

    //用数组把对话框对象指针保存起来
    pDialog[0] = &m_page1;
    pDialog[1] = &m_page2;

    //显示初始页面
    pDialog[0]->ShowWindow(SW_SHOW);
    pDialog[1]->ShowWindow(SW_HIDE);

    //保存当前选择
    m_CurSelTab = 0;

这样就可进行正常的显示了,如果响应页面切换这个事件,可以为Tab Control控件添加消息响应函数:OnSelchangeTab,并在该函数中添加如下代码:

   /

void CHustojExManngerDlg::OnTcnSelchangeTab1(NMHDR *pNMHDR, LRESULT *pResult)
{
	// TODO: Add your control notification handler code here

	//得到页面的数据
	CString str;
	int nNewSel = m_tab.GetCurSel();

	if (m_CurSelTab != nNewSel)  
	{  
		showTab(nNewSel);
	}

	if(m_CurSelTab==0)
	{
		m_page1.UpdateData(TRUE);
		// m_page1.GetDlgItem(IDC_EDIT_PAGE1)->GetWindowText(str);
	}
	if(m_CurSelTab==1)
	{
		m_page2.UpdateData(TRUE);
		// m_page2.GetDlgItem(IDC_EDIT_PAGE2)->GetWindowText(str);
	}
	if(m_CurSelTab==2)
	{
		m_page2.UpdateData(TRUE);
		// m_page3.GetDlgItem(IDC_EDIT_PAGE2)->GetWindowText(str);
	}
	if(m_CurSelTab==3)
	{
		m_page3.UpdateData(TRUE);
		// m_page3.GetDlgItem(IDC_EDIT_PAGE2)->GetWindowText(str);
	}
	//首先我们先把当前的页面隐藏起来,然后得到新的页面索引,最后就把相关页面显示出来即可。这比一个个去枚举简单多了。
	*pResult = 0;
}


void CHustojExManngerDlg::showTab(int nIndex)
{
	CRect rectClient;
	m_tab.GetClientRect(&rectClient);
	rectClient.top += 33;
	rectClient.left += 1;
	rectClient.right -= 3;
	rectClient.bottom -= 2 ;

	pDialog[m_CurSelTab]->SetWindowPos(NULL,rectClient.left,rectClient.top,rectClient.Width(),rectClient.Height(),SWP_HIDEWINDOW);
	pDialog[nIndex]->SetWindowPos(NULL,rectClient.left,rectClient.top,rectClient.Width(),rectClient.Height(),SWP_SHOWWINDOW);
	m_CurSelTab = nIndex;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值