MFC TabCtrl 控件简单使用


    本文记录 MFC 中 TabCtrl 控件的简单使用,另外还包括TabCtrl 控件选项卡标题的隐藏及用按钮控制页面切换。

    新建基于对话框的程序,添加一个 TabCtrl 控件,为其定义一个控件变量 m_tabCtrl ;插入两个对话框作为TabCtrl控件的页面,需将对话框属性Border设为None、style设为Child,给两个对话框添加类。在应用程序对话框类中添加两个页面对话框类型的变量 CEnPage m_enPageDlg,CDePage m_dePageDlg,另外定义类变量CDialog *m_pPageDlg[2] 用来保存对话框指针,定义类变量 int m_nCurSelTab 用来保存当前页面索引,以方便引用。

    在应用程序对话框的初始化函数中添加下面的代码,将页面对话框与TabCtrl控件关联起来:

        // 在TabCtrl中增加两个页面
	m_tabCtrl.InsertItem(0, _T("加密"));
	m_tabCtrl.InsertItem(1, _T("解密"));
	// 创建两个对话框页面
	m_enPageDlg.Create(IDD_ENDLG, &m_tabCtrl);
	m_dePageDlg.Create(IDD_DEDLG, &m_tabCtrl);
	// 设定页面对话框在TabCtrl中的显示范围:
	CRect rcTab;
	m_tabCtrl.GetClientRect(rcTab);
	// 以下更改的范围为该测试中的最合适范围,临近边界值
	rcTab.top += 22;
	rcTab.bottom -= 2;
	rcTab.left += 1;
	rcTab.right -= 3;
	m_enPageDlg.MoveWindow(&rcTab);
	m_dePageDlg.MoveWindow(&rcTab);
	// 保存页面对话框对象指针到数组中
	m_pPageDlg[0] = &m_enPageDlg;
	m_pPageDlg[1] = &m_dePageDlg;
	//  设置初始显示页面
	m_pPageDlg[0]->ShowWindow(SW_SHOW);
	m_pPageDlg[1]->ShowWindow(SW_HIDE);
	m_nCurSelTab = 0;

    为TabCtrl控件的TCN_SELCHANGE事件添加消息响应函数:

void CEncryptFileTest1Dlg::OnTcnSelchangeTab1(NMHDR *pNMHDR, LRESULT *pResult)
{
	// TODO: 在此添加控件通知处理程序代码
	int nCurSelTab = m_tabCtrl.GetCurSel();
	m_pPageDlg[m_nCurSelTab]->ShowWindow(SW_HIDE);
	m_pPageDlg[nCurSelTab]->ShowWindow(SW_SHOW);
	m_nCurSelTab = nCurSelTab;
	*pResult = 0;
}

    效果截图如下:

TabCtrl效果图

    为了使TabCrtl控件不显示选项卡标题,通过其他方式(如按钮)来控制,此时,需要把TabCrtl控件的“Owner Draw Fixed”属性设为 True,且不要使用TabCrtl的InsertItem()函数来插入选项卡,而是直接使用要贴在选项卡页面上的对话框的创建函数Create(IDD_DLG, &m_tabCtrl)来关联,然后通过页面对话框来控制其显隐即可。

TabCtrl效果图2

    其中两个按钮的响应代码如下:

void CEncryptFileTest1Dlg::OnBnClickedButton1()
{
	ShowSelPageDlg(0);
}

void CEncryptFileTest1Dlg::OnBnClickedButton2()
{
	ShowSelPageDlg(1);
}

void CEncryptFileTest1Dlg::ShowSelPageDlg(int nCurSel)
{
	int nOldSelTab = m_nCurSelTab;
	m_nCurSelTab = nCurSel;
	m_pPageDlg[nOldSelTab]->ShowWindow(SW_HIDE);
	m_pPageDlg[m_nCurSelTab]->ShowWindow(SW_SHOW);
}




  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值