CTabCtrl

1.先建立一个MFC应用程序,然后在资源管理器中新建一对话框,并为它建立对应的类,然后从工具箱里面把Tab Control控件放入该对话框中。

再在对话框类中,声明一个CTabCtrl变量:

CTabCtrl m_tab;

变量m_tab用来与对话框中的Tab Control控件交互,为此要在DoDataExchange函数中加入DDX_Control语句:

DDX_Control(pDX, IDC_TAB_NEW, m_tab);

IDC_TAB_NEW是Tab Control控件的ID。

2.建立两个新对话框,用来当做Tab Control控件的两个页。别忘了把Style改为Child,Border改为None。然后就可以在上面加其他控件了。

接着分别为这两个对话框建立两个类,比如CPage1和CPage2。

然后在对话框类头文件中,加入这两个对话框对象。同时增加一个变量int m_CurSelTab,用了表明是哪个Page即将被切换。

int m_CurSelTab;
CPage1 m_page1;
CPage2 m_page2;
CDialog* pDialog[2];  //用来保存对话框对象指针

在对话框类的初始化函数中需要把CPage1、CPage2和Tab Control关联起来,并保存页面地址,设置初始页面。

//为Tab Control增加两个页面   
  1. m_tab.InsertItem(0, _T("Farm"));
  2. m_tab.InsertItem(1, _T("Note"));
  3. //创建两个对话框
  4. m_page1.Create(IDD_DIALOG1, &m_tab);
  5. m_page2.Create(IDD_DIALOG2, &m_tab);
  6. //设定在Tab内显示的范围
  7. CRect rc;
  8. m_tab.GetClientRect(rc);
  9. rc.top += 20;
  10. m_page1.MoveWindow(&rc);
  11. m_page2.MoveWindow(&rc);
  12. //把对话框对象指针保存起来
  13. pDialog[0] = &m_page1;
  14. pDialog[1] = &m_page2;
  15. //显示初始页面
  16. pDialog[0]->ShowWindow(SW_SHOW);
  17. pDialog[1]->ShowWindow(SW_HIDE);
  18. //保存当前选择
  19. m_CurSelTab = 0;
//为Tab Control增加两个页面
m_tab.InsertItem(0, _T("Farm"));
m_tab.InsertItem(1, _T("Note"));
//创建两个对话框
m_page1.Create(IDD_DIALOG1, &m_tab);
m_page2.Create(IDD_DIALOG2, &m_tab);
//设定在Tab内显示的范围
CRect rc;
m_tab.GetClientRect(rc);
rc.top += 20;
m_page1.MoveWindow(&rc);
m_page2.MoveWindow(&rc);
//把对话框对象指针保存起来
pDialog[0] = &m_page1;
pDialog[1] = &m_page2;
//显示初始页面
pDialog[0]->ShowWindow(SW_SHOW);
pDialog[1]->ShowWindow(SW_HIDE);
//保存当前选择
m_CurSelTab = 0;

这里我们用了一个CDialog指针数组来进行保存Tab Control的每个页,数组的大小是Tab Control页面的个数,数组下标对应着每个页面的索引(这样方便快速存取)。接下来,为Tab Control添加消息处理程序:

ON_NOTIFY(TCN_SELCHANGE, IDC_TAB_NEW, &CTabDlg::OnTcnSelchangeTabNew)

void CTabDlg::OnTcnSelchangeTabNew(NMHDR *pNMHDR, LRESULT *pResult)  
  1. {
  2. //把当前的页面隐藏起来
  3. pDialog[m_CurSelTab]->ShowWindow(SW_HIDE);
  4. //得到新的页面索引
  5. m_CurSelTab = m_tab.GetCurSel();
  6. //把新的页面显示出来
  7. pDialog[m_CurSelTab]->ShowWindow(SW_SHOW);
  8. *pResult = 0;
  9. }
void CTabDlg::OnTcnSelchangeTabNew(NMHDR *pNMHDR, LRESULT *pResult)
{
//把当前的页面隐藏起来
pDialog[m_CurSelTab]->ShowWindow(SW_HIDE);
//得到新的页面索引
m_CurSelTab = m_tab.GetCurSel();
//把新的页面显示出来
pDialog[m_CurSelTab]->ShowWindow(SW_SHOW);
*pResult = 0;
}

3.如果要在Tab Control控件外面获取其内部对话框中控件的数据,就需要使用DDX/DDV机制,还要调用相应的UpdateData函数。

m_page1.UpdateData();

m_page2.UpdateData();

CPropertySheet

1.先建立MFC应用程序,然后在资源管理器中新建一对话框,并为它建立对应的类,在编辑该对话框,可以自由加一些所需的控件,但得留出一定的空间用于放至

标签页。在主对话框类里加入一个CPropertySheet类的一个成员变量m_sheet代表整个标签页。

2.接着分别为创建两个对话框,建立两个与之对应的类时,注意选择基类为CPropertyPage。假设新生成两个类为CPage1,CPage2。

3.在刚才加入m_sheet成员的位置,加入上述类型成员变量m_page1,m_page2。

CPropertySheet m_sheet;

CPage1        m_page1;

Cpage2         m_page2;

在主对话框类的OnInitDialog()函数中加入:

//加入标签,标签名由各个子对话框的标题栏决定   
  1. m_sheet.AddPage(&m_page1);
  2. m_sheet.AddPage(&m_page2);
  3. //对修改标签页title
  4. m_page1.m_psp.dwFlags¦=PSP_USETITLE;
  5. m_page1.m_psp.pszTitle= "标签页A";
  6. m_page2.m_psp.dwFlags¦=PSP_USETITLE;
  7. m_page2.m_psp.pszTitle= "标签页B";
  8. //用Create来创建一个属性页
  9. m_sheet.Create(this, WS_CHILD | WS_VISIBLE, WS_EX_CONTROLPARENT);
  10. //调整m_sheet位置
  11. RECT rect;
  12. GetWindowRect(&rect);
  13. m_sheet.MoveWindow(&rect);

MFC中使用CTabCtrl或CPropertySheet实现标签页相关推荐

  1. Chrome浏览器中页面在新的标签页打开

    最近一直在使用谷歌浏览器(你还在百度?)发现Chrome默认是在本页面打开链接,这点我很不爽.在上网找了以下四种方法: 1.用鼠标中键(也就是滚轮)打开链接. 2.按住Ctrl键的同时单击链接. 3. ...

  2. google浏览器中页面在新的标签页打开

    最近一直在使用谷歌浏览器(你还在百度?)发现Chrome默认是在本页面打开链接,这点我很不爽.在上网找了以下四种方法: 1.用鼠标中键(也就是滚轮)打开链接. 2.按住Ctrl键的同时单击链接. 3. ...

  3. 标签页使用及bug解决

    标签页使用 1.点击菜单项生成新的标签页 2.点击标签页项实现页面跳转 3.bug 标签页放在main中 标签页el-tabs主要属性: (1)editableTabsValue:高亮表示被选中的标签 ...

  4. (仿头条APP项目)7.首页标签页完善和微头条页面设计实现

    文章目录 一.首页标签页完善 效果图 具体实现 二.微头条页面设计实现 效果图 实现思路 具体实现 布局 微头条页面实体类 业务逻辑代码 一.首页标签页完善 在之前已经把首页北京标签的新闻列表页面基本 ...

  5. 三招快速重新打开被关闭的Chrome标签页

    在 Chrome 这样的多标签页浏览器中,不小心关闭一个标签页实在是太常见的事情了.当这种情况发生时,我们有三个办法可以重新打开这个刚刚关闭的页面. 1,打开一个新的标签页,在新标签页页面最下方会有一 ...

  6. 百度Sugar BI 数据可视化里的标签页组件如何实现

    百度Sugar BI 标签页组件可方便用户在一个页面中对多个报表页面进行集中查看.标签页组件通过配置选项卡切换,满足企业人员在业务工作中,对业务平级内容的收纳与展示. Sugar BI支持用户自定义设 ...

  7. 如何在Firefox火狐浏览器点击链接打开新标签页、搜索、和书签

    如何在Firefox火狐浏览器点击链接打开新标签页.搜索.和书签 在新标签页打开网页上的链接(点击链接打开新标签页) 在新标签中打开搜索结果 在新标签页打开书签 打开Firefox火狐浏览器设置 在F ...

  8. QTabWidget——创建标签页的多页面切换

    QTabWidget 用来分页显示 重要函数: 1.void setTabText(int, QString); //设置页面的名字. 2.void setTabToolTip(QString); / ...

  9. 像用chrome一样,用Win10资源管理器(增加标签页)

    文章目录 安装步骤 支持系统 支持语言: 偏好设置 高效快捷键 我们都习惯了用各种浏览器的"多标签页"功能,同时打开多个网页时用标签页切换,不会有很多页面,既整洁又清爽,这比传统的 ...

最新文章

  1. 在Mac上通过VMware Fushion 15.1配置静态IP虚拟机实录
  2. 广域网域内流量工程优化—Vecloud
  3. 昨天,JetBrains 推出“下一代 IDE”,快看看有哪些值得期待的功能!
  4. 美国农业生产与农产品国际贸易 对话国际农民丰收节贸易会
  5. C++模板特化的一个BUG?
  6. AQS 源码流程分析
  7. python get post请求_使用python封装get+post请求
  8. form:radiobuttons单选按钮i-check选中触发
  9. linux 文件读取 监控,linux 文件系统的监控
  10. PDS+VL Motion对发动机曲轴系统不平衡载荷进行仿真分析
  11. 【外贸建站规则】外贸网站建站流程有哪些?需要注意什么? (上)
  12. python量化期权_Python量化之期货期权无风险套利测试
  13. Push上传出错:Support for password authentication was removed on August 13, 2021.git did not exit cleanly
  14. 原生js预览ofd文件,JavaScript
  15. 65536 65535 65534
  16. 计算机软件专业河南省专科学校,计算机相关专业河南省哪个学校好
  17. C51模拟PS2键盘(二)
  18. 无人驾驶汽车横向控制模型
  19. 老路《用得上的商学课》学习笔记(21-25课)
  20. java实现阿里大于短信发送服务

热门文章

  1. 求素数mdp c语言问题,C语言使用深度优先搜索算法解决迷宫问题(堆栈)
  2. java程序设计自考_java程序设计自考试题
  3. pdf覆盖图片 Java_Java 添加、替换、删除PDF中的图片的示例代码
  4. TensorFlow 笔记 (五)自定义训练: 演示
  5. mysql字符串结束符_mysql常见字符串处理函数结束
  6. Linux学习笔记---初次编译Uboot系统
  7. xMind思维导图软件如何合并多个导图
  8. 查看指定进程io状态的iotop命令
  9. MATLAB安装工具箱
  10. sh/bash/csh/Tcsh/ksh/pdksh等shell本质区别