C++中MFC Tab Control控件的使用详解

1. 新建一个MFC工程, 取名MyTab, 选择Dialog based, 然后Finish.

2. 删除对话框上默认添加的三个控件. 添加Tab Control控件并在Property属性中设置ID为IDC_TABTEST 在More Styles里勾上Bottom. 调速尺寸使其布满整个对话框, 我这边Tab Control的尺寸最后为164X203. 在ClassWizard为其添加变量, 变量名为m_tab. 类型为CTabCtrl.

3. 在对话框的初始化函数OnInitDialog里面添加如下代码:

1 2 3

m_tab.InsertItem(0,"参数一"); //添加参数一选项卡 m_tab.InsertItem(1,"参数二"); //添加参数二选项卡 m_tab.InsertItem(2,"结果");  //添加结果选项卡

4.在对话框资源里面添加三个对话框资源, ID分别命名为IDD_PARA1, IDD_PARA2, IDD_RESULT. 字体为宋体, 字号为9, style为Child, Border为None, 宽度调整为161. 再分别为其添加对应的基于CDialog类CPara1, CPara2, CResult.

5. 在CMyTabDlg类中添加三个成员变量m_para1, m_para2, m_result, 分别是三个子对话框的实例. 代码如下:

1 2 3

CResult m_result; CPara2 m_para2; CPara1 m_para1;

6. 在IDD_PARA1对话框上添加静态文本控件内容为"参数一" 再在后面插入一个文本框控件, 用ClassWizard将其关联为一个int型变量,名为m_nPara1; 在IDD_PARA2对话框上添加静态文本控件内容为"参数二" 再在后面插入一个文本框控件, 用ClassWizard将其关联为一个int型变量,名为m_nPara2; 在IDD_RESULT对话框上添加静态文本控件内容为"结果" 再在后面插入一个文本框控件, 用ClassWizard将其关联为一个int型变量,名为m_nResult;

7. 为CPara1类添加成员函数int GetParaValue() 代码如下:

1 2 3 4

int CPara1::GetParaValue() ...{  return m_nPara1; }

为CPara2类添加成员函数int GetParaValue() 代码如下:

1 2 3 4

int CPara2::GetParaValue() ...{  return m_nPara2; }

为CResult类添加成员函数void SetResultValue(int nResult) 代码如下:

1 2 3 4

void CResult::SetResultValue(int nResult) ...{    m_nResult = nResult; }

8. 在IDD_MYTAB_DIALOG对话框的初始化函数OnInitDialog里面添加如下代码:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26

//关联对话框,并且将IDC_TABTEST控件设为父窗口 m_para1.Create(IDD_PARA1,GetDlgItem(IDC_TABTEST)); m_para2.Create(IDD_PARA2,GetDlgItem(IDC_TABTEST)); m_result.Create(IDD_RESULT,GetDlgItem(IDC_TABTEST));    //获得IDC_TABTEST客户区大小 CRect rs; m_tab.GetClientRect(&rs); //调整子对话框在父窗口中的位置 rs.top+=1; rs.bottom-=60; rs.left+=1; rs.right-=2;    //设置子对话框尺寸并移动到指定位置 m_para1.MoveWindow(&rs); m_para2.MoveWindow(&rs); m_result.MoveWindow(&rs);    //分别设置隐藏和显示 m_para1.ShowWindow(true); m_para2.ShowWindow(false); m_result.ShowWindow(false);    //设置默认的选项卡 m_tab.SetCurSel(0);

9. 添加Tab Control控件的TCN_SELCHANGE事件响应函数OnSelchangeTabtest(NMHDR* pNMHDR, LRESULT* pResult) ,函数体代码如下:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23

int CurSel = m_tab.GetCurSel();  switch(CurSel)  ...{  case 0:      m_para1.ShowWindow(true);      m_para2.ShowWindow(false);      m_result.ShowWindow(false);  break;  case 1:      m_para1.ShowWindow(false);      m_para2.ShowWindow(true);      m_result.ShowWindow(false);  break;  case 2:      m_para1.ShowWindow(false);      m_para2.ShowWindow(false);      m_result.ShowWindow(true);  break;  default:      ;    }        *pResult = 0;

10. 在IDD_MYTAB_DIALOG对话框下面添加一个按钮, 标题为"计算" 为其添加事件响应函数, 代码如下:

1 2 3 4

m_para1.UpdateData(true);    m_para2.UpdateData(true);    m_result.SetResultValue(m_para1.GetParaValue()+m_para2.GetParaValue());    m_result.UpdateData(false);

以上所述就是不问的全部内容了,希望大家能够喜欢。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏用户2442861的专栏

javascript dom学习笔记

http://blog.csdn.net/zhoulenihao/article/details/11099455

951
来自专栏逸鹏说道

Markdown基础(内含:锚点使用,使用HTML,新页面跳转,目录生成)

如果要语法高亮就在```后面加小写语言名,eg:html,css,javascript,python,cs(csharp)等等

2003
来自专栏大数据钻研

HTML5学习笔记(一)

1.什么是 HTML5? HTML5 将成为 HTML、XHTML 以及 HTML DOM 的新标准。 HTML 的上一个版本诞生于 1999 年。自从那以后,...

3605
来自专栏从零开始学 Web 前端

从零开始学 Web 之 DOM(五)元素的创建

952
来自专栏更流畅、简洁的软件开发方式

表单控件续(1)——应用接口来简化和分散代码

上次有点仓促,有几个地方没有明确。 后者是整个流程,前者是其中的一个步骤,是一个简单的思路说明,其中前三段代码都是表单控件里面的。 2、我要写的是一个表单控...

1979
来自专栏王磊的博客

史上最易懂——ReactNative分组列表SectionList使用详情及示例详解

React Native系列 《逻辑性最强的React Native环境搭建与调试》 《ReactNative开发工具有这一篇足矣》 《解决React N...

80014
来自专栏阮一峰的网络日志

HTML 自定义元素教程

组件是 Web 开发的方向,现在的热点是 JavaScript 组件,但是 HTML 组件未来可能更有希望。 本文就介绍 HTML 组件的基础知识:自定义元素(...

3008
来自专栏web

项目取名规范

1392
来自专栏逸鹏说道

Markdown基础(内含:锚点使用,使用HTML,新页面跳转,目录生成)

如果要语法高亮就在```后面加小写语言名,eg:html,css,javascript,python,cs(csharp)等等

39211
来自专栏Google Dart

AngularDart Material Design 选择 顶

可以手动(在模板中)或通过SelectionOptions实例指定选项。 可以通过模板或通过检查选择模型将选项标记为已选择。

992

扫码关注云+社区