mfc 中 Tab Control 控件的使用

本文介绍了如何在MFC中使用Tab Control控件,包括准备工作、设计CTab类、添加标签页的对话框以及在对话框中调用控件的详细步骤,帮助开发者更好地理解和应用这一功能。
摘要由CSDN通过智能技术生成

   之前对mfc的了解也仅限于提到它时不会联想到肯德基而已,前些天要用mfc做一个管理系统,便可怜兮兮的到处去查资料,真的挺不容易。现在有点时间,就先把Tab Control控件的使用整理出来,方便后来者,也方便以后的自己。

 

使用示例:

一,准备工作:

  建立基于对话框的mfc工程TabCtrl;并选中对话框的Title Bar 和 System Menu属性。

删除“确定”和“取消”按钮。

拖放Tab control 控件

二,设计CTab类:

   为了将刚才添加的Tab control 控件玩弄于鼓掌之中,需要设计一个Ctab类,该类继承与CtabCtrl;

将Tab control 控件关联一个ctab的对象:m_tab;(关联方法:在TabCtrlDlg.h中添加:public:CTab m_tab;然后再在void CTabCtrlDlg::DoDataExchange(CDataExchange* pDX)方法中,添加:DDX_Control(pDX, IDC_TAB1, m_tab);并把Tab.h包含进来。);

   在CTab类中添加变量:

	LPCTSTR m_Title[16];//存储标签控件中所有窗口的标题.
	CDialog* m_pPages[16];//存储标签控件中所有窗口指针
	UINT m_IDD[16];//存储标签控件中所有窗口的ID
	int m_nNumOfPages;//记录标签控件中标签的页数
	int m_nCurrentPage;//记录标签控件中,当前页的页面索引.

构造函数中对变量初始化:

CTab::CTab()
{
	m_nNumOfPages = 0;
	m_nCurrentPage = 0;
}

添加Addpage方法,用以向控件中添加页面:

BOOL CTab::AddPage(LPCTSTR title,CDialog *pDialog,UINT ID)
{
	if(16 == m_nNumOfPages)//最多添加16个页面
	{
		return FALSE;
	}
	m_nNumOfPages++;
	m_pPages[m_nNumOfPages-1]=pDialog;//页面关联的窗口指针
	m_IDD[m_nNumOfPages-1]=ID;//窗口ID
	m_Title[m_nNumOfPages-1] = title;//窗口标题
	return TRUE;
}


添加Show方法,用以显示某个标签页:

void CTab::Show(int n)//显示某个标签页中的窗口
{
	for(int i=0;i<m_nNumOfPages;i++)//利用循环的方式创建页面
	{
		m_pPages[i]->Create(m_IDD[i],this);
		InsertItem(i,m_Title[i]);
	}

	CRect tabRect, itemRect;
	int nX, nY, nXc, nYc;

	GetClientRect(&tabRect);
	GetItemRect(0, &itemRect);

	nX=itemRect.left;
	nY=itemRect.bottom+1;
	nXc=tabRect.right-itemRect.left-2;
	nYc=tabRect.bottom-nY-2;
	
	for( int nCount=0; nCount < m_nNumOfPages; nCount++ )//隐藏所有的窗口
	{
		m_pPages[nCount]->SetWindowPos(&wndTop, nX, nY, nXc, nYc, SWP_HIDEWINDOW);
	}
	m_pPages[n]->SetWindowPos(&wndTop, nX, nY, nXc, nYc, SWP_SHOWWINDOW);//显示指定 的窗口

}

添加鼠标左键按下的响应函数:

void CTab::OnLButtonDown(UINT nFlags, CPoint point)
{
	// TODO: 在此添加消息处理程序代码和/或调用默认值

	CTabCtrl::OnLButtonDown(nFlags, point);

	if(m_nCurrentPage != GetCurFocus())
	{
		m_pPages[m_nCurrentPage]->ShowWindow(SW_HIDE);
		m_nCurrentPage=GetCurFocus();
		m_pPages[m_nCurrentPage]->ShowWindow(SW_SHOW);
	}
}


至此,CTab类终于搞完了。

 

三:添加标签页的对话框:

在此只做演示,因此,添加两个对话框资源,在属性中,取消 Title bar ;并把 Style设置为 Child;

分别关联类:CDialog1 和 CDialog2;

如果要对对话框的内容进行控制的话,就可以在这两个类中添加相应的方法及响应函数了。。。

 

四,CTabCtrlDialog中,对标签控件的调用:

添加变量:

private:
	CDialog1 m_dlg1;
	CDialog2 m_dlg2;


在BOOL CTabCtrlDlg::OnInitDialog()中调用AddPage方法:

	m_tab.AddPage(_T("对话框一"),&m_dlg1,IDD_DIALOG1);
	m_tab.AddPage(_T("对话框二"),&m_dlg2,IDD_DIALOG2);

运行一下:0 errors, 0 warings

一切 OK!!

 

阿哲

2012-1-4

 

MFC(Microsoft Foundation Classes)提供了Tab Control类来实现选项卡控件Tab Control是一种常见的界面布局,可以在一个窗口切换显示不同的内容。 要在MFC应用程序使用Tab Control,可以按照以下步骤进行操作: 1. 在资源编辑器将一个Tab Control控件添加到你的对话框或窗口。可以在工具栏上找到Tab Control控件,并将其拖放到对话框或窗口的位置。 2. 在类视图找到对应的对话框类,并添加一个成员变量来控制Tab Control控件。右键单击对话框类,在上下文菜单选择"Add Variable"。在对话框变量向导,选择Tab Control控件,并为其添加一个成员变量。 3. 在对话框的OnInitDialog()函数使用Tab Control控件的成员变量来设置选项卡的标签和关联的对话框或窗口。可以使用TabCtrl_InsertItem()函数添加选项卡,使用TabCtrl_SetCurSel()函数设置当前选的选项卡。 4.为每个选项卡关联一个对话框或窗口,以便在切换选项卡时显示相应的内容。可以使用Create()函数创建对应的对话框或窗口,并使用ShowWindow()函数显示或隐藏对话框或窗口。 5. 可以在选项卡切换时处理相应的消息,以便在切换选项卡时执行一些操作。可以在对话框类的OnSelChange()函数处理WM_NOTIFY消息,使用TabCtrl_GetCurSel()函数获取当前选的选项卡索引,并根据需要执行相应的操作。 以上是使用MFC Tab Control的基本步骤,你可以根据自己的需求进行进一步的定制和扩展。希望对你有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值