TabCtrl使用

0x1 新建子页面

插入三个对话框,ID分别为:IDD_PAGE_FILE、IDD_PAGE_NETWORK、IDD_PAGE_PROCESS

工具箱-【属性】-【Style】设置为【child】,【Border】设置为【None】

1、绑定类

每个对话框绑定一个对话框类

控件ID 绑定类名 作用
IDD_PAGE_FILE CPAGEFile 文件页
IDD_PAGE_NETWORK CPAGENet 网络页
IDD_PAGE_PROCESS CPAGEProc 进程页

0x2 调用对话框的页面操作

1、绑定变量

添加一个Tab Control控件,并为其关联一个CTabCtrl类型的控件变量m_tabCtrl,ID为IDC_TAB_DEMO

在【MFC_05_TabCtrlDlg.h】文件里声明这三个类。

	//Tab
CPAGEFile m_FilePage; // 文件页
CPAGENet m_NetPage; // 网络页
CPAGEProc m_ProcPage; // 进程页 #define MAX_DLG_PAGE 5 // 默认值,被切换的对话框数量
CDialog *m_pDialog[MAX_DLG_PAGE]; // 多少个选项
int m_CurSelTab; // 当前选中的选项

2、在OnInitDialog()初始化

以下所有代码都需要在OnInitDialog()函数中进行写入

m_tabCtrl.InsertItem(0, _T("文件"));
m_tabCtrl.InsertItem(1, _T("网络"));
m_tabCtrl.InsertItem(2, _T("进程"));

调整大小代码:

m_tabCtrl.SetPadding(19);            // SetPadding设置选项卡之间间隔
m_tabCtrl.SetMinTabWidth(50); // SetMinTabWidth设置最小选项卡宽度
m_tabCtrl.SetItemSize(CSize(50,25)); // SetItemSize设置选项卡设置高度

非模态方式创建三个子对话框:

m_FilePage.Create(IDD_PAGE_FILE, &m_tabCtrl);
m_NetPage.Create(IDD_PAGE_NETWORK, &m_tabCtrl);
m_ProcPage.Create(IDD_PAGE_PROCESS, &m_tabCtrl);

设定在Tab内显示的范围

//设定在Tab内显示的范围
CRect rc;
m_tabCtrl.GetClientRect(rc);
rc.top += 25;
// rc.bottom -= 8;
// rc.left += 8;
// rc.right -= 8; m_FilePage.MoveWindow(&rc);
m_NetPage.MoveWindow(&rc);
m_ProcPage.MoveWindow(&rc);

设置显示

//把对话框对象指针保存起来
m_pDialog[0] = &m_FilePage;
m_pDialog[1] = &m_NetPage;
m_pDialog[2] = &m_ProcPage;
//显示初始页面
m_pDialog[0]->ShowWindow(SW_SHOW);
m_pDialog[1]->ShowWindow(SW_HIDE);
m_pDialog[2]->ShowWindow(SW_HIDE); //保存当前选择
m_CurSelTab = 0;

3、TCN_SELCHANGE消息处理函数

TabCtrl控件属性页-【控件事件】-【TCN_SELCHANGE】,然后就可以进行选项卡之间的切换了。


void CMFC05TabCtrlDlg::OnTcnSelchangeTabDemo(NMHDR *pNMHDR, LRESULT *pResult)
{
// TODO: 在此添加控件通知处理程序代码
m_pDialog[m_CurSelTab]->ShowWindow(SW_HIDE); // 把当前的界面隐藏
m_CurSelTab = m_tabCtrl.GetCurSel(); // 获取选中的界面选项索引值
if (m_pDialog[m_CurSelTab])
{
m_pDialog[m_CurSelTab]->ShowWindow(SW_SHOW); // 只显示选中的界面选项
}
*pResult = 0;
}

TabCtrl使用的更多相关文章

  1. TabCtrl的基本用法

    MFC TabCtrl控件的使用方法及思路 1.建立基于Dialog的应用程序 2.添加TabCtrl控件,并关联变量 3.建立TabCtrl中存放的Dialog子对话框若干,并关联类 4.在Tabc ...

  2. CTabCtrl - 如何使用TabCtrl控件

    CTabCtrl - 如何使用TabCtrl控件 建立一个基于对话框的MFC应用程序TabCtrlTest Step 1:在资源视图中,新建对话框资源,资源ID:IDD_TabCtrlExample_ ...

  3. MFC TabCtrl 控件修改标签尺寸

    注意:无论那种方法,都要先设置Tab控件的Style属性为fixed width. 第一种方法 MFC,tabcontrol控件改变标签大小 - CSDN博客 https://blog.csdn.ne ...

  4. 分享两种实现Winform程序的多语言支持的解决方案

    因公司业务需要,需要将原有的ERP系统加上支持繁体语言,但不能改变原有的编码方式,即:普通程序员感受不到编码有什么不同.经过我与几个同事的多番沟通,确定了以下两种方案: 方案一:在窗体基类中每次加载并 ...

  5. 第五篇:在SOUI中使用XML布局属性指引(pos, offset, pos2type)

    窗口布局的概念 每一个UI都是由大量的界面元素构成的,在Windows编程,这些界面元素的最小单位通常称之为控件. 布局就是这些控件在主界面上的大小及相对位置. 传统的布局一般使用一个4个绝对坐标来定 ...

  6. 给Source Insight做个外挂系列之五--Insight “TabSiPlus”

    “TabSiPlus 外挂插件”主要有两部分组成,分别是“外挂插件加载器”和“插件动态库”.“插件动态库”完成Source Insight窗口的Hook,显示Tab标签栏,截获Source Insig ...

  7. 如何给开源的DUILib支持Accessibility

    最近的工作是给开源的DUILib支持Accessibility, 一些经验记录并分享下. 微软的Accessibility其实Windows平台上一个挺重要的东西, 尽管在国内不受重视,但是如果你的软 ...

  8. WIN 下的超动态菜单(二)用法

    WIN 下的超动态菜单(一)简介 WIN 下的超动态菜单(二)用法 WIN 下的超动态菜单(三)代码 作者:黄山松,发表于博客园:http://www.cnblogs.com/tomview/     ...

  9. 第十一篇:SOUI系统资源管理

    SOUI资源管理模块 从前篇已经讲到在SOUI中所有资源文件通过一个uires.idx文件进行索引. 这里将介绍在程序中如何引用这些资源文件. 在SOUI系统中,资源文件通过一个统一的接口对象读取: ...

随机推荐

  1. 【刷题】BZOJ 2069 [POI2004]ZAW

    Description 在Byte山的山脚下有一个洞穴入口. 这个洞穴由复杂的洞室经过隧道连接构成. 洞穴的入口是一条笔直通向"前面洞口"的道路. 隧道互相都不交叉(他们只在洞室相 ...

  2. 2.9 C++使用默认参数的构造函数

    总结: 默认参数的构造函数,其默认参数必须置于参数列表的结尾. 设计类的构造函数的时候最好不要同时是用构造函数的重载和带参数的构造函数. 我们可以想象一个这样的场景:某一天书店整理库存,发现了一些非常 ...

  3. 自学Linux Shell5.1-shell父子关系

    点击返回 自学Linux命令行与Shell脚本之路 5.1-shell父子关系 1 shell常见的种类  bash是Linux标准默认的Shell,是BunrneAgain Shell的缩写,内部命 ...

  4. bzoj1691/luogu2869 [USACO07DEC]挑剔的美食家 (STL::set)

    给牛和草都按价格排序,然后贪心地把草给牛(就是尽量给满足价格的.要求的美味度最高但不超过这个草的美味度的牛) 这个可以用一个平衡树来维护,偷懒直接用multiset了 #include<bits ...

  5. A1035. Password

    To prepare for PAT, the judge sometimes has to generate random passwords for the users. The problem ...

  6. codeblocks 支持多个exe同时执行

    如果看总时间,没什么用,因为总资源是一样的. 但是可以做到:吃饭前,执行多个程序,吃完饭,所有程序执行完.

  7. 窗体监听事件WindowListener

    EXIT_ON_CLOSE:结束窗口所在的应用程序.在窗口被关闭的时候会退出JVM. DISPOSE_ON_CLOSE:隐藏当前窗口,并释放此窗体占有的资源.如果程序没有其他线程在运行,当所有窗口都被 ...

  8. 即将上线的Kafka 集群(用CM部署的)无法使用“--bootstrap-server”进行消费,怎么破?

    即将上线的Kafka 集群(用CM部署的)无法使用“--bootstrap-server”进行消费,怎么破? 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.   一.报错:org.a ...

  9. vue基础篇---vue组件

    vue模块第一篇,因为公司马上要用到这vue开发.早就想好好看看vue了.只有实际工作中用到才会进步最快.vue其他的简单指令就不多讲了,没啥意思,网上一大堆.看w3c就ok. 组件这个我个人感觉坑蛮 ...

  10. 怎么简单高效破解MyEclipse10、获取注册码

    亲测有效 附上地址:https://www.cnblogs.com/caohuimingfa/p/6659902.html