工具箱中选择 Tab Control
为标签页关联类
添加类
添加Tab Control控件,属性设置:ID:IDC_TAB1
为Tab Control控件绑定控件变量,变量名为m_tab,类型为CTabCtrl。
在TabCtrlDlg.cpp文件中,找到初始化函数OnInitDialog并在里面添加如下代码:
// TODO: 在此添加额外的初始化代码
m_tab.InsertItem(0, TEXT("第一页"));
m_tab.InsertItem(1, TEXT("第二页"));
添加两个对话框
去掉边框:将border的值改为none
弹出方式修改为子窗口 将style的值改为child
添加静态文本框,改为“第一页”;
再为其添加对应的基于CDialog类CPage1。(其他标签页执行相同操作)
在项目dlg头文件中添加两个标签页的头文件并创建对象,如下:
//头文件
#include "CPage1.h"
#include "CPage2.h"
//创建私有对象
CPage1 m_Page1;
CPage2 m_Page2;
在初始化函数中添加代码:
//关联对话框, 并且将IDC_TABTEST控件设为父窗口
m_Page1.Create(IDD_DIALOG1, GetDlgItem(IDC_TAB1));
m_Page2.Create(IDD_DIALOG2, GetDlgItem(IDC_TAB1));
//获得IDC_TABTEST客户区大小
CRect rs;
m_tab.GetClientRect(&rs);
//调整子对话框在父窗口中的位置
rs.top += 30;
rs.bottom -= 60;
rs.left += 1;
rs.right -= 2;
//设置子对话框尺寸并移动到指定位置
m_Page1.MoveWindow(&rs);
m_Page2.MoveWindow(&rs);
//分别设置隐藏和显示
m_Page1.ShowWindow(true);
m_Page2.ShowWindow(false);
//设置默认的选项卡
m_tab.SetCurSel(0);
双击Tab Control控件(或者右击/添加事件处理程序,消息类型TCN_SELCHANGE)添加代码如下:
int CurSel = m_tab.GetCurSel();
switch (CurSel)
{
case 0:
m_Page1.ShowWindow(true);
m_Page2.ShowWindow(false);
break;
case 1:
m_Page2.ShowWindow(true);
m_Page1.ShowWindow(false);
break;
default:
;
}
以上就是标签页控件的使用方法。学这一块儿的内容真的是费了大力气。
方法二是用到了CTabSheet 出现的问题自己还解决不了,目前只能mark一下。
~~将两个文件添加到项目下TabSheet的h和cpp文件,在解决方案中添加现有项。若添加成功,则在类试图中有CTabSheet类。
为标签页修改属性,右键为这两个窗口添加类CDLG1和CDLG2,在出现的h文件中可以看到关联。
为主标签页设置变量,变量类型改为CTabSheet,
在初始化函数所在的cpp文件中声明两个标签页的h文件,在dlg的h文件中也声明这两个头文件,并在类的定义中创建对象CDLG1 dlg1;CDLG2 dlg2;
在初始化函数中添加以下代码,
n_tab.AddPage(TEXT("系统设置"), &dlg1, IDD_DIALOG1);
n_tab.AddPage(TEXT("系统管理"), &dlg2, IDD_DIALOG2);
//显示
n_tab.Show();
如此操作出现大量bug
1。错误描述:fatal error C1010:在查找预编译头时遇到意外的文件结尾。是否忘记了向源中添加“#include"stdafx.h"”?
解决方式:
一.
- 在解决方案资源管理器中,右击相应的.cpp文件,点击“属性”
- 在左侧配置属性中,点开“C/C++”,单击“预编译头”
- 更改右侧第一行的“创建/使用预编译头”,把选项从“使用预编译头(/Yu)”改成“不使用预编译头”
- 注:每一个报错的.cpp都要如此更改哦
在dlg的h文件中加入#include “TabSheet.h”~~