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(

,
"
参数一
"
);  
//
添加参数一选项卡


m_tab.InsertItem(

,
"
参数二
"
);  
//
添加参数二选项卡


m_tab.InsertItem(

,
"
结果
"
);    
//
添加结果选项卡

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
+=

;
rs.bottom
-=

;
rs.left
+=

;
rs.right
-=

;
    

//
设置子对话框尺寸并移动到指定位置


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(

);

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


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

;

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);

11.这个小程序很简单,但是他说明了Tab Control控件的基本用法.

注意:

1://关联对话框,并且将IDC_TABTEST控件设为父窗口(方法2)

m_para1.SetParent(GetDlgItem(IDC_TABTEST));
m_para2.SetParent(GetDlgItem(IDC_TABTEST));
m_result.SetParent(GetDlgItem(IDC_TABTEST));
2:

;

这里一点要注意:调整距离,否则,子对话框将覆盖Tab control控件,将不能显示
将出现这中情况:

//调整子对话框在父窗口中的位置 如下
 rs.top+=20;
 rs.bottom-=20;
 rs.left+=20;
 rs.right-=20;

哈哈,注意啊。

VC中Tab control的用法的更多相关文章

  1. 【转】VC中MessageBox与AfxMessageBox用法与区别

    原文网址:http://blog.csdn.net/holybin/article/details/28403109 一.MessageBox()用法 1.函数原型 Messagebox函数在Win3 ...

  2. VC中MessageBox与AfxMessageBox用法与区别

    一.MessageBox()用法 1.函数原型 Messagebox函数在Win32 API和MFC里的定义有区别. Win32 API的定义如下: int WINAPI MessageBox(    ...

  3. 转:VC中MessageBox的常见用法

    一.关于MessageBox       消息框是个很常用的控件,属性比较多,本文列出了它的一些常用方法,及指出了它的一些应用场合.       1.MessageBox("这是一个最简单的 ...

  4. VC中MessageBox的常见用法

    一.关于MessageBox       消息框是个很常用的控件,属性比较多,本文列出了它的一些常用方法,及指出了它的一些应用场合.       1.MessageBox("这是一个最简单的 ...

  5. VC++中MessageBox的常见用法详解

    消息框是个很常用的控件,属性比较多,本文列出了它的一些常用方法,及指出了它的一些应用场合.         1.MessageBox("这是一个最简单的消息框!");        ...

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

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

  7. mfc中Button、Edit Control和MFC EditBrowse Control的用法

    [前(fei)言(hua)] 写LL(1)分析器被CString转string卡了一个多小时也是醉了. 趁着还算清醒写下这次用到的控件的使用方法好了. 这次实验的mfc用到了四个控件:Edit Con ...

  8. VC中TRACE()的用法

    个人总结:最近看网络编程是碰到了TRACE语句,不知道在哪里输出,查了一晚上资料也没找出来,今天终于在CSDN上找到了,真是个高地方啊,方法如下: 1.在MFC中加入TRACE语句 2.在TOOLS- ...

  9. VC中TRACE ASSERT VERIFY之用法

    一.TRACE宏     当选择了Debug目标,并且afxTraceEnabled变量被置为TRUE时,TRACE宏也就随之被激活了.但在程序的Release版本中,它们是被完全禁止的.下面是一个典 ...

随机推荐

  1. jstorm简介(转)

    Jstorm是参考storm的实时流式计算框架,在网络IO.线程模型.资源调度.可用性及稳定性上做了持续改进,已被越来越多企业使用 作为commiter和user,我还是非常看好它的应用前景,下面是在 ...

  2. .Net 配置文件——继承ConfigurationSection实现自己定义处理类处理自己定义配置节点

    除了使用继承IConfigurationSectionHandler的方法定义处理自己定义节点的类.还能够通过继承ConfigurationSection类实现相同效果. 首先说下.Net配置文件里一 ...

  3. 配置QtCreator+CDB远程调试环境(要设置_NT_SYMBOL_PATH和QT_PLUGIN_PATH和Path)

    相关环境信息:开发机Win7 x64.远程机器WinXP.调试器是CDB.Qt版本5.2.1 一.部署远程机器环境 我这里用的是虚拟机(Windows XP),根据你要调试的程序选择安装不同架构的Wi ...

  4. Lucene.Net 2.3.1开发介绍 —— 三、索引(六)

    原文:Lucene.Net 2.3.1开发介绍 -- 三.索引(六) 2.2 Field的Boost 如果说Document的Boost是一条线,那么Field的Boost则是一个点.怎么理解这个点呢 ...

  5. mysql dump 参数

    mysql dump 参数: -R, --routines Dump stored routines (functions and procedures). 备份 函数和存储过程: -E, --eve ...

  6. Swift - 文件,文件夹操作大全

    ios开发经常会遇到读文件,写文件等,对文件和文件夹的操作,这时就可以使用NSFileManager,NSFileHandle等类来实现. 下面总结了各种常用的操作: 1,遍历一个目录下的所有文件 1 ...

  7. PHP正则表达式完全手册

    原文:PHP正则表达式完全手册 php的正则表达式完全手册 前言 正则表达式是烦琐的,但是强大的,学会之后的应用会让你除了提高效率外,会给你带来绝对的成就感.只要认真去阅读这些资料,加上应用的时候进行 ...

  8. 在Ubuntu Desktop打开终端的2种方式

    共有3中方法: 1.在Ubuntu左上角选择File/Open in Terminal 2.快捷键alt+F2调出Run a Command,输入gnome-terminal 添加右键支持 在终端,输 ...

  9. zoj 3870

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=5518 题意:n个数,从中选出两个数,问这两个数的异或值大于两个数较大 ...

  10. [Android学习]Activity之间传递对象和对象集合

    开发过程中,Activity之间传递数据是必不可少的,android中使用Intent和Bundle作为数据载体,在Activity之间传递,对于基础数据类型,Bundle已经提供相关的put,get ...