TabCtrl使用

Posted 17bdw

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了TabCtrl使用相关的知识,希望对你有一定的参考价值。

TabCtrl使用

0x1 新建子页面

插入三个对话框,ID分别为:IDD_PAGE_FILE、IDD_PAGE_NETWORK、IDD_PAGE_PROCESS

工具箱-【属性】-【Style】设置为【child】,【Border】设置为【None】

1、绑定类

每个对话框绑定一个对话框类

控件ID 绑定类名 作用
IDD_PAGE_FILE CPAGEFile 文件页
IDD_PAGE_NETWORK CPAGENet 网络页
IDD_PAGE_PROCESS CPAGEProc 进程页

0x2 调用对话框的页面操作

1、绑定变量

添加一个Tab Control控件,并为其关联一个CTabCtrl类型的控件变量m_tabCtrl,ID为IDC_TAB_DEMO

在【MFC_05_TabCtrlDlg.h】文件里声明这三个类。

    //Tab
    CPAGEFile m_FilePage;   // 文件页
    CPAGENet  m_NetPage;    // 网络页
    CPAGEProc m_ProcPage;   // 进程页

#define MAX_DLG_PAGE 5     // 默认值,被切换的对话框数量
    CDialog      *m_pDialog[MAX_DLG_PAGE];   // 多少个选项
    int          m_CurSelTab;                // 当前选中的选项

2、在OnInitDialog()初始化

以下所有代码都需要在OnInitDialog()函数中进行写入

m_tabCtrl.InsertItem(0, _T("文件"));
m_tabCtrl.InsertItem(1, _T("网络"));
m_tabCtrl.InsertItem(2, _T("进程"));

调整大小代码:

m_tabCtrl.SetPadding(19);            // SetPadding设置选项卡之间间隔
m_tabCtrl.SetMinTabWidth(50);        // SetMinTabWidth设置最小选项卡宽度
m_tabCtrl.SetItemSize(CSize(50,25)); // SetItemSize设置选项卡设置高度

非模态方式创建三个子对话框:

m_FilePage.Create(IDD_PAGE_FILE, &m_tabCtrl);
m_NetPage.Create(IDD_PAGE_NETWORK, &m_tabCtrl);
m_ProcPage.Create(IDD_PAGE_PROCESS, &m_tabCtrl);

设定在Tab内显示的范围

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

m_FilePage.MoveWindow(&rc);
m_NetPage.MoveWindow(&rc);
m_ProcPage.MoveWindow(&rc);

设置显示

//把对话框对象指针保存起来
m_pDialog[0] = &m_FilePage;
m_pDialog[1] = &m_NetPage;
m_pDialog[2] = &m_ProcPage;
//显示初始页面
m_pDialog[0]->ShowWindow(SW_SHOW);
m_pDialog[1]->ShowWindow(SW_HIDE);
m_pDialog[2]->ShowWindow(SW_HIDE);

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

3、TCN_SELCHANGE消息处理函数

TabCtrl控件属性页-【控件事件】-【TCN_SELCHANGE】,然后就可以进行选项卡之间的切换了。


void CMFC05TabCtrlDlg::OnTcnSelchangeTabDemo(NMHDR *pNMHDR, LRESULT *pResult)
{
    // TODO: 在此添加控件通知处理程序代码
    m_pDialog[m_CurSelTab]->ShowWindow(SW_HIDE);  // 把当前的界面隐藏
    m_CurSelTab = m_tabCtrl.GetCurSel();          // 获取选中的界面选项索引值
    if (m_pDialog[m_CurSelTab])
    {
        m_pDialog[m_CurSelTab]->ShowWindow(SW_SHOW);  // 只显示选中的界面选项
    }
    *pResult = 0;
}

以上是关于TabCtrl使用的主要内容,如果未能解决你的问题,请参考以下文章

如何在其父窗口关闭时通知 TabCtrl?

如何在 TabCtrl 内的子对话框中将焦点设置为 CEdit?

如何从 MFC 选项卡控件 (TabCtrl) 获取额外数据?

MFC中TabCtrl怎么用??

005 MFC 选卡控件TabCtrl 动画控件Animate

如何从MFC选项卡控件(TabCtrl)获取额外数据?