MFC Tab控件的使用方法

⌚Time: 2022-05-31 21:14:56

👨‍💻Author: Jack Ge

新建一个mfc项目a

在资源视图中,对a.rc右键,添加资源,选择Dialog,新建

之后会创建一个新的窗口,为窗口添加一个static text控件,改名为tab1

对窗口属性进行设置,Border设置为None,Style设置为Child

同样的方法,创建另一个窗口tab2

为窗口添加类,右击tab1窗口,添加类

起名为CTab1Dlg,点击完成

对于tab2窗口也是同样的操作

解决方案中多了两个窗口类

对于主窗口a,增加一个Tab Control控件

为此Tab Control控件增加变量,对控件右击,添加变量

设置变量名为m_tab,点击完成

在aDlg.h中包含两个窗口类的头文件


#include "Tab1Dlg.h"

#include "Tab2Dlg.h"

在CaDlg类中,增加两个窗口类的变量


private:

    CTabCtrl m_tab;//Tab Control控件变量

    CTab1Dlg m_tab1Dlg;//tab1窗口变量

    CTab2Dlg m_tab2Dlg;//tab2窗口变量

在BOOL CaDlg::OnInitDialog()函数中,对标签控件进行设置


 // TODO: 在此添加额外的初始化代码

    //增加标签页

    m_tab.InsertItem(0,L"Tab1");

    m_tab.InsertItem(1,L"Tab2");

    //创建标签页,IDD_DIALOG1,IDD_DIALOG2是标签页窗口的ID

    m_tab1Dlg.Create(IDD_DIALOG1,&m_tab);

    m_tab2Dlg.Create(IDD_DIALOG2,&m_tab);

    // 获取标签控件客户区Rect 

    CRect rect;

    m_tab.GetClientRect(&rect);

    //窗口下移防止遮挡tab控件的标签头

    rect.top += 22;

    //放置标签页窗口并显示

    m_tab1Dlg.SetWindowPos(NULL,rect.left,rect.top,rect.Width(),rect.Height(),SWP_SHOWWINDOW);

    m_tab2Dlg.SetWindowPos(NULL,rect.left,rect.top,rect.Width(),rect.Height(),SWP_HIDEWINDOW);

之后需要为Tab Control控件添加事件监听,实现的是,切换不同标签页,能够显示不同的标签页窗口

对Tab Control控件右击,添加事件处理程序

选择TCN_SELCHANGE,类列表CaDlg,点击添加编辑

之后在void CaDlg::OnTcnSelchangeTab1(NMHDR *pNMHDR, LRESULT *pResult)函数中编辑事件处理代码


void CaDlg::OnTcnSelchangeTab1(NMHDR *pNMHDR, LRESULT *pResult)

{

    // TODO: 在此添加控件通知处理程序代码

    switch (m_tab.GetCurSel())

    {

    //切换到标签0,显示tab1标签

    case 0:

        m_tab1Dlg.ShowWindow(TRUE);

        m_tab2Dlg.ShowWindow(FALSE);

        break;

    //切换到标签1,显示tab2标签

    case 1:

        m_tab1Dlg.ShowWindow(FALSE);

        m_tab2Dlg.ShowWindow(TRUE);

        break;

    default:

        m_tab1Dlg.ShowWindow(TRUE);

        break;

    }

    *pResult = 0;

}


实现的效果