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. 窗口绘制有关的消息整理 WM_PAINT, WM_NCPAINT, WM_ERASEBKGND

    WM_PAINTWM_PAINT是Windows窗口系统中一条重要的消息,应用程序通过处理该消息实现在窗口上的绘制工作. WM_NCPAINT当窗口客户区以外的部分(如窗口标题栏.菜单栏等)需要需要重 ...

  2. eclipse发布项目报错:Multiple Contexts hava a path of “/xxx“

    你的位置:首页 > Java编程 > eclipse发布项目报错:Multiple Contexts hava a path of “/xxx“ eclipse发布项目报错:Multipl ...

  3. frame.bounds和center

    CGPoint point=CGPoint(x,y);  //表示位置 CGSize size=CGSzieMake(width,height);  //表示大小 CGRect rect=CGRect ...

  4. JavaScript快速入门(四)——JavaScript函数

    函数声明 之前说的三种函数声明中(参见JavaScript快速入门(二)——JavaScript变量),使用Function构造函数的声明方法比较少见,我们暂时不提.function func() { ...

  5. Flash Builder 条件编译的实现

    最近项目需要开发多个版本,  而Flash又没有像C++ 那样的 #ifdef,  来让一套代码支持多个版本的编译发布; 经过研究, 终于知道Flash Builder如何支持条件编译: 1. 在项目 ...

  6. Oracle中如何插入特殊字符:& 和 ' (多种解决方案)

    今天在导入一批数据到Oracle时,碰到了一个问题:Toad提示要给一个自定义变量AMP赋值,一开始我很纳闷,数据是一系列的Insert语句,怎么会有自定义变量呢?后来搜索了一下关键字AMP发现,原来 ...

  7. 14.2.5.5 Change Buffer

    14.2.5.5 Change Buffer change buffer是一个指定的数据结构 用于caches 数据到secondary index pages 当影响的pages 不是在buffer ...

  8. QT 4.2.2的安装(安装完还要再编译,注意设置Windows Path)

    (安装篇)前奏: 提到C++的GUI Framework估计大多数人都会想到MFC.VCL,因为在十年前的COM时代,这两个大家伙几乎垄断了整个C++ windows平台上应用程序的开发市场, 但是最 ...

  9. Java回调理解 (step by step)

    在网上搜索了很多篇关于java回调函数的文章,自己也来试了一下写了这篇博客,可能有些地方理解不到位,烦请各位大大指正. 在计算机程序设计中.回调函数.或简称回调.是指通过函数參数传递到其他代码的,某一 ...

  10. Android 编程之第三方开发 MaoZhuaWeiBo微博开发演示样例-1

    在大学期间我做过非常多类似这种APP.这个是我们小组之前做的,我后期增加非常多新元素.完好了这个应用,由于为了加强 专业技术嘛.也是常常熬夜写些小东西,嘿嘿.只是还算不错.起码技术长进了不少嘛,还是非 ...