MFC中使用CTabCtrl或CPropertySheet实现标签页
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关联起来,并保存页面地址,设置初始页面。
- 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;
//为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)
- {
- //把当前的页面隐藏起来
- pDialog[m_CurSelTab]->ShowWindow(SW_HIDE);
- //得到新的页面索引
- m_CurSelTab = m_tab.GetCurSel();
- //把新的页面显示出来
- pDialog[m_CurSelTab]->ShowWindow(SW_SHOW);
- *pResult = 0;
- }
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()函数中加入:
- m_sheet.AddPage(&m_page1);
- m_sheet.AddPage(&m_page2);
- //对修改标签页title
- m_page1.m_psp.dwFlags¦=PSP_USETITLE;
- m_page1.m_psp.pszTitle= "标签页A";
- m_page2.m_psp.dwFlags¦=PSP_USETITLE;
- m_page2.m_psp.pszTitle= "标签页B";
- //用Create来创建一个属性页
- m_sheet.Create(this, WS_CHILD | WS_VISIBLE, WS_EX_CONTROLPARENT);
- //调整m_sheet位置
- RECT rect;
- GetWindowRect(&rect);
- m_sheet.MoveWindow(&rect);
MFC中使用CTabCtrl或CPropertySheet实现标签页相关推荐
- Chrome浏览器中页面在新的标签页打开
最近一直在使用谷歌浏览器(你还在百度?)发现Chrome默认是在本页面打开链接,这点我很不爽.在上网找了以下四种方法: 1.用鼠标中键(也就是滚轮)打开链接. 2.按住Ctrl键的同时单击链接. 3. ...
- google浏览器中页面在新的标签页打开
最近一直在使用谷歌浏览器(你还在百度?)发现Chrome默认是在本页面打开链接,这点我很不爽.在上网找了以下四种方法: 1.用鼠标中键(也就是滚轮)打开链接. 2.按住Ctrl键的同时单击链接. 3. ...
- 标签页使用及bug解决
标签页使用 1.点击菜单项生成新的标签页 2.点击标签页项实现页面跳转 3.bug 标签页放在main中 标签页el-tabs主要属性: (1)editableTabsValue:高亮表示被选中的标签 ...
- (仿头条APP项目)7.首页标签页完善和微头条页面设计实现
文章目录 一.首页标签页完善 效果图 具体实现 二.微头条页面设计实现 效果图 实现思路 具体实现 布局 微头条页面实体类 业务逻辑代码 一.首页标签页完善 在之前已经把首页北京标签的新闻列表页面基本 ...
- 三招快速重新打开被关闭的Chrome标签页
在 Chrome 这样的多标签页浏览器中,不小心关闭一个标签页实在是太常见的事情了.当这种情况发生时,我们有三个办法可以重新打开这个刚刚关闭的页面. 1,打开一个新的标签页,在新标签页页面最下方会有一 ...
- 百度Sugar BI 数据可视化里的标签页组件如何实现
百度Sugar BI 标签页组件可方便用户在一个页面中对多个报表页面进行集中查看.标签页组件通过配置选项卡切换,满足企业人员在业务工作中,对业务平级内容的收纳与展示. Sugar BI支持用户自定义设 ...
- 如何在Firefox火狐浏览器点击链接打开新标签页、搜索、和书签
如何在Firefox火狐浏览器点击链接打开新标签页.搜索.和书签 在新标签页打开网页上的链接(点击链接打开新标签页) 在新标签中打开搜索结果 在新标签页打开书签 打开Firefox火狐浏览器设置 在F ...
- QTabWidget——创建标签页的多页面切换
QTabWidget 用来分页显示 重要函数: 1.void setTabText(int, QString); //设置页面的名字. 2.void setTabToolTip(QString); / ...
- 像用chrome一样,用Win10资源管理器(增加标签页)
文章目录 安装步骤 支持系统 支持语言: 偏好设置 高效快捷键 我们都习惯了用各种浏览器的"多标签页"功能,同时打开多个网页时用标签页切换,不会有很多页面,既整洁又清爽,这比传统的 ...
最新文章
- 在Mac上通过VMware Fushion 15.1配置静态IP虚拟机实录
- 广域网域内流量工程优化—Vecloud
- 昨天,JetBrains 推出“下一代 IDE”,快看看有哪些值得期待的功能!
- 美国农业生产与农产品国际贸易 对话国际农民丰收节贸易会
- C++模板特化的一个BUG?
- AQS 源码流程分析
- python get post请求_使用python封装get+post请求
- form:radiobuttons单选按钮i-check选中触发
- linux 文件读取 监控,linux 文件系统的监控
- PDS+VL Motion对发动机曲轴系统不平衡载荷进行仿真分析
- 【外贸建站规则】外贸网站建站流程有哪些?需要注意什么? (上)
- python量化期权_Python量化之期货期权无风险套利测试
- Push上传出错:Support for password authentication was removed on August 13, 2021.git did not exit cleanly
- 原生js预览ofd文件,JavaScript
- 65536 65535 65534
- 计算机软件专业河南省专科学校,计算机相关专业河南省哪个学校好
- C51模拟PS2键盘(二)
- 无人驾驶汽车横向控制模型
- 老路《用得上的商学课》学习笔记(21-25课)
- java实现阿里大于短信发送服务
热门文章
- 求素数mdp c语言问题,C语言使用深度优先搜索算法解决迷宫问题(堆栈)
- java程序设计自考_java程序设计自考试题
- pdf覆盖图片 Java_Java 添加、替换、删除PDF中的图片的示例代码
- TensorFlow 笔记 (五)自定义训练: 演示
- mysql字符串结束符_mysql常见字符串处理函数结束
- Linux学习笔记---初次编译Uboot系统
- xMind思维导图软件如何合并多个导图
- 查看指定进程io状态的iotop命令
- MATLAB安装工具箱
- sh/bash/csh/Tcsh/ksh/pdksh等shell本质区别