1. 新建一个MFC项目
1) 文件/新建/项目/
2) 选择"MFC 应用程序",并输入名称 "MFCTabCtrlTest",点"确定"
3) 下一步
4) 选择"基于对号框",点击"下一步"
5) 可以勾选"最小化框"、"最大化框", 可以输入 "对话框标题:Tab Control 测试"
6) 可直接点"完成" 或 点"下一步"后再点"完成"
2. 在对话框窗口拖入 Tab Control,设置控件位置、大小及 ID(IDC_TAB1)
3. 添加变量 m_tab
1) 在对话框窗口(IDD_MFCTABCTRLTEST_DIALOG) 右击 Tab Control,选择"添加变量"
2)输入变量名(m_tab),点击"完成"
在 MFCTabCtrlTestDlg.h 中可以看到添加的变量:CTabCtrl m_tab;
在 MFCTabCtrlTestDlg.cpp 文件的 void CMonitorPage1::DoDataExchange(CDataExchange* pDX) 函数中添加如下代码
DDX_Control(pDX, IDC_TAB1, m_tab);
4. 添加对话框 IDD_DIALOG_TABITEM1 和 IDD_DIALOG_TABITEM2 (如果资源视图未显示,点击菜单中"视图/其他窗口/资源视图"即可)
1) 资源视图/MFCTabCtrlTest.rc/Dialog
2) 右击 Dialog 选择"插入 Dialog"
3) 设置 ID: IDD_DIALOG_TABITEM1、Style: Child 及 Caption: Dialog Hello、 Border: None、
4) 窗口(IDD_DIALOG_TABITEM1 )中拖入 Static Text,设置为:Hello World!
5) 在对话框窗口右击,选择"添加类": 输入类名"CDlgPage1", 点击"完成"
同样添加对话框 IDD_DIALOG_TABITEM2,属性设置如下:
Style: Child,Caption: Dialog My God,窗口中拖入 Static Text,设置为:My God!,添加类: CDlgPage2
5. MFCTabCtrlTestDlg.h 中
包含头文件
#include "DlgPage1.h"
#include "DlgPage2.h"
定义变量
CDlgPage1 m_page1;
CDlgPage2 m_page2;//全局变量
6. MFCTabCtrlTestDlg.cpp 中 BOOL CMFCTabCtrlTestDlg::OnInitDialog() 函数添加如下代码
m_tab.InsertItem(0, L"Page 1 Hello");//0代表tab标签索引
m_tab.InsertItem(1, L"Page 2 God");
m_page1.Create(MAKEINTRESOURCEW(IDD_DIALOG_TABITEM1), &m_tab);
m_page2.Create(MAKEINTRESOURCEW(IDD_DIALOG_TABITEM2), &m_tab); //实现绑定
CRect rect; //位置对象,四点决定矩形大小
m_tab.GetClientRect(rect);
rect.top += 20; //在上面留一段小空间
//rect.bottom -= 4;
//rect.left += 4;
//rect.right -= 8;
//设置子对话框尺寸并移动到指定位置
m_page1.MoveWindow(rect);
m_page2.MoveWindow(rect);
//设置隐藏和显示
m_page1.ShowWindow(SW_SHOW);
m_page2.ShowWindow(SW_HIDE);
//设置默认的选项卡
m_tab.SetCurSel(0);
7. 资源视图/MFCTabCtrlTest.rc/Dialog/打开对话框窗口(IDD_MFCTABCTRLTEST_DIALOG)/ 选中 Tab Control(IDC_TAB1) /
事件(点击"闪电")/ TCN_SELCHANGE / 添加选择状态发生改变时响应该函数 OnTcnSelchangeTab1
MFCTabCtrlTestDlg.cpp 中
1) BEGIN_MESSAGE_MAP 中添加如下代码:
ON_NOTIFY(TCN_SELCHANGE, IDC_TAB1, &CMFCTabCtrlTestDlg::OnTcnSelchangeTab1)
2) 函数 void CMFCTabCtrlTestDlg::OnTcnSelchangeTab1(NMHDR *pNMHDR, LRESULT *pResult)
8. 选择状态发生改变时响应该函数 void CMFCTabCtrlTestDlg::OnTcnSelchangeTab1(NMHDR *pNMHDR, LRESULT *pResult) 中添加如下代码
switch (m_tab.GetCurSel()) //获取当前选中的索引
{
case 0:
m_page1.ShowWindow(SW_SHOW);
m_page2.ShowWindow(SW_HIDE);
break;
case 1:
m_page1.ShowWindow(SW_HIDE);
m_page2.ShowWindow(SW_SHOW);
break;
default:
break;
}