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里面添加如下代码: 
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, 分别是三个子对话框的实例. 代码如下:

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() 代码如下: 
int CPara1::GetParaValue() 
...{ 
 return m_nPara1; 

为CPara2类添加成员函数int GetParaValue() 代码如下: 
int CPara2::GetParaValue() 
...{ 
 return m_nPara2; 

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

8. 在IDD_MYTAB_DIALOG对话框的初始化函数OnInitDialog里面添加如下代码: 
//关联对话框,并且将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) ,函数体代码如下:

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对话框下面添加一个按钮, 标题为"计算" 为其添加事件响应函数, 代码如下:

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

C++ MFC Tab Control控件的详细使用的更多相关文章

  1. MFC编程 | tab control控件的使用

    因为课程需要,会用到MFC编程,所以讲一些经验总结下,以便日后使用查询. // tab control控件的使用 // 建立一个Cluster窗口,通过tab可以切换成C-Means和Fuzzy C- ...

  2. 【MFC】Tab Control 控件的使用(转)

    原文转自 http://blog.csdn.net/hustspy1990/article/details/5425365 1.先建立一个对话框MFC应用程序,然后在工具箱里面把Tab Control ...

  3. 通过编写串口助手工具学习MFC过程——(七)添加Tab Control控件

    通过编写串口助手工具学习MFC过程 因为以前也做过几次MFC的编程,每次都是项目完成时,MFC基本操作清楚了,但是过好长时间不再接触MFC的项目,再次做MFC的项目时,又要从头开始熟悉.这次通过做一个 ...

  4. 在VC++中使用Tab Control控件

    系统环境:Windows 7软件环境:Visual Studio 2008 SP1本次目的:在模态或非模态对话框中使用Tab Control控件,及引申在单/多文档中使用 查阅MSDN文档,对于创建T ...

  5. C++ 关于MFC List Control 控件的使用事项 原创

    1\在开发项目时,使用到了 listcontrol 控件,就一些问题,做一下备注,以备以后使用 (1)  给list项目 删除所有的项目  DeleteAllItems(); (2) 给list项目 ...

  6. mfc Picture Control 控件属性

    知识点: Picture Control 控件属性 CStatic类 图片控件 图片控件使用 一.图片控件属性 Picture Control 属性: Type:Frame //框架 Type:Etc ...

  7. MFC List Control 控件添加单元格编辑,实现可编辑重写

    在实现随机生成四则运算的个人项目中,目前已经完成基本功能,想要把程序变成一个Windows界面的程序.原本以为学习过MFC,应该很快就能完成.但是由于以前用的都是VC6.0,这次用了VS2010,稍微 ...

  8. MFC 使用MFC EditBrowse Control控件选择文件或者文件夹

    从工具箱中拖拽一个MFC EditBrowse Control到窗体中, 通过设置“Browse Mode”属性指定“文件浏览”还是“文件夹浏览” 可以通过添加对象的方式将其与一个CString se ...

  9. 利用MFC Picture Control控件 加载bmp,png

    1.在资源视图,选择PictureControl,并且在属性中把Type设置为Bitmap. 2.加载PNG CStatic* pWnd = (CStatic*)GetDlgItem(IDC_PIC) ...

随机推荐

  1. 递归锁,event事件和信号量

    锁通常被用来实现对共享资源的同步访问.为每一个共享资源创建一个Lock对象,当你需要访问该资源时,调用acquire方法来获取锁对象(如果其它线程已经获得了该锁,则当前线程需等待其被释放),待资源访问 ...

  2. 关于AJAX与form表单提交数据的格式

    一 form表单传输文件的格式: 只有三种: multipart/form-data 一般用于传输文件,图片文件或者其他的. 那么其中我们默认的是application/x-www-form-urle ...

  3. MySQL完整性约束foreign key与表操作。

    一  MySQL中表的完整性约束: 我们首先知道约束条件跟类型的宽度一样,都是可选的,也就是说,我们在创建表的时候可以不指定,但是为了创建的表更加的完整,我们一般会加一些约束条件,name下面我们讲一 ...

  4. vue的v-for数组和对象

    v-for="(item,index) of hot" //数组遍历 v-for="(item,key,index) of cities" //对象遍历 //k ...

  5. linux下mysql-5.6忘记root密码,重置root密码详细过程

      在linux平台下使用mysql过程中忘记了root密码,对于运维和DBA来讲都是一件头疼的事情,下面来讲解下怎么进行重置mysql数据库root 密码: 1.首先停止mysql服务进程: 1 s ...

  6. mocha、should、supertest释义

    解释参考地址: https://itbilu.com/nodejs/npm/VyrFOe51-.html Mocha模块 Mocha是一个简单.可扩展的用于Node.js和JavaScript的单元测 ...

  7. 微信小程序开发warning: Now you can provide attr "wx:key" for a "wx:for" to improve performance

    用微信官方的模板发现突然报了这个warning,检查原因: 官方解释: wx:key 如果列表中项目的位置会动态改变或者有新的项目添加到列表中,并且希望列表中的项目保持自己的特征和状态(如 <i ...

  8. [转]ORA-12560: TNS: 协议适配器错误

    转自:http://worms.blog.51cto.com/969144/1293265 Sqlplus 登陆oracle时报错ORA-12560:TNS: 协议适配器错误 如下:C:\Users\ ...

  9. 分布式计算课程补充笔记 part 1

    ▶ 高性能计算机发展历程 真空管电子计算机,向量机(Vector Machine),并行向量处理机(Parallel Vector Processors,PVP),分布式并行机(Parallel Pr ...

  10. python中的reverse

    reverse()将列表中的所有元素位置反转,举个例子: a = [1, 2, 3, 4, 5] a.reverse() print(a) 输出结果: [5, 4, 3, 2, 1]