TabCtrl使用

TabCtrl使用

0x1 新建子页面

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

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

1、绑定类

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

控件ID绑定类名作用
IDD_PAGE_FILECPAGEFile文件页
IDD_PAGE_NETWORKCPAGENet网络页
IDD_PAGE_PROCESSCPAGEProc进程页

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;
}

转载于:https://www.cnblogs.com/17bdw/p/10352440.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值