1.先建立一个对话框MFC应用程序,然后在工具箱里面把Tab Control控件放到对话框中的合适位置上。

再在对话框类中,将该控件绑定一个变量

用两种方法:

1 )

自己定义成员变量 CTabCtrl* m_editLineTab;

在OnInitDialog函数中:关联Tab的ID

m_editLineTab=(CTabCtrl*)GetDlgItem(IDC_EDITLINETAB);

然后就可以设置选项卡

2)用向导绑定一个变量,

在.h文件生成

// Dialog Data
 //{{AFX_DATA(DlgSymbolEdit)
 enum { IDD = IDD_DIALOG_SYMEDIT };
 CTabCtrl m_editLineTab;
 。。。。
 //}}AFX_DATA

.cpp文件中

DoDataExchange函数里也自动生成了DDX_Control(pDX, IDC_EDITLINETAB, m_editLineTab);

然后再OnInitDialog()中首先需要

m_editLineTab.SubclassDlgItem(IDC_EDITLINETAB,this);原因不知道

然后再做其他操作。

2.建立两个对话框程序,用来当做Tab Control控件的两个页。别忘了把Style改为Child,Border改为None。然后就可以在上面加其他控件了。

接着分别为这两个对话框建立两个类,比如CPage1和CPage2。

然后在对话框类头文件中,加入这两个对话框对象。同时增加一个变量int m_CurSelTab,用了表明是哪个Page即将被切换。

int m_CurSelTab; CPage1 m_page1; CPage2 m_page2; CDialog* pDialog[2];  //用来保存对话框对象指针

在对话框类的初始化函数中OnInitDialog()需要把CPage1、CPage2和Tab Control关联起来,并保存页面地址,设置初始页面。

  //为Tab Control增加两个页面
TCITEM tabItem;
tabItem.mask = TCIF_TEXT;
tabItem.pszText = "GDI";
m_editLineTab->InsertItem(, &tabItem);
tabItem.pszText = "AGG";
m_editLineTab->InsertItem(, &tabItem);
//或者
m_tab.InsertItem(, _T("Farm"));
m_tab.InsertItem(, _T("Note"));
////创建两个对话框
m_tabPage1.Create(IDD_TABPAGE1, &m_editLineTab);
m_tabPage2.Create(IDD_TABPAGE2, &m_editLineTab);
////设定在Tab内显示的范围
CRect rc;
m_editLineTab.GetClientRect(rc);
rc.top += ;
rc.bottom -= ;
rc.left += ;
rc.right -= ;
m_tabPage1.MoveWindow(&rc);
m_tabPage2.MoveWindow(&rc);
//把对话框对象指针保存起来
pDialog[] = &m_tabPage1;
pDialog[] = &m_tabPage2;
//显示初始页面
pDialog[]->ShowWindow(SW_SHOW);
pDialog[]->ShowWindow(SW_HIDE);
//保存当前选择
m_CurSelTab = ;

这里我们用了一个CDialog指针数组来进行保存Tab Control的每个页,数组的大小是Tab Control页面的个数,数组下标对应着每个页面的索引(这样方便快速存取)。

接下来,为Tab Control添加消息处理程序:

ON_NOTIFY(TCN_SELCHANGE, IDC_TAB1, &CTabDlg::OnTcnSelchangeTab1)

void CTabDlg::OnTcnSelchangeTab1(NMHDR *pNMHDR, LRESULT *pResult)
{
//把当前的页面隐藏起来
pDialog[m_CurSelTab]->ShowWindow(SW_HIDE);
//得到新的页面索引
m_CurSelTab = m_tab.GetCurSel();
//把新的页面显示出来
pDialog[m_CurSelTab]->ShowWindow(SW_SHOW);
*pResult = ;
}
 
 

3.如果要在Tab Control控件外面获取其内部对话框中控件的数据,就需要使用DDX/DDV机制,还要调用相应的UpdateData函数。

m_page1.UpdateData();

m_page2.UpdateData();

常见问题:我把Tab Control控件放在Group Box里面,它就不能显示.

之前的那个Group Box就像是覆盖了Tab Control.又尝试了很多次,发现Tab Control这个控件有点特殊,它一般会被其它控件遮住,这个也是Group Box的特点.系统应该是采用相似的方式处理它们的显示问题,即将它们设置为最底层,所以当它们重叠时,后建的就要被先建的遮住.

可以通过ctrl+d,然后鼠标点击调整Z序,只要TabCtrl的Z序在GroupBox前就没问题

控件Z序的问题

MFC控件CTabCtrl关联变量的更多相关文章

  1. MFC 控件使用教程

    combo box控件用法: 下拉选择控件,首先将控件拖动到你需要使用控件的地方,用ClassWizard为它关联一个变量,我们注意到变量类型是CString型的.右击属性,General中可以设置一 ...

  2. MFC 可编辑文本框,MFC控件关联变量总结

    Edit Control控件,默认状态下,按回车会调用OnOK()关闭窗体.解决此bug可以,类视图中单击CMFCApplication3Dlg,下方重写OnOK(),注释掉其中的代码即可. Edit ...

  3. mfc 控件添加变量

    关联控件变量 初始化数据 一.关联控件变量 .为Edit控件关联数值类变量 变量名 m_edt1_s .为Edit控件关联控件类变量 变量名 m_edt1_ctl 二.控件变量的使用 HWND h=: ...

  4. 列表控件ListBox关联的MFC中的类:CListBox

    列表控件ListBox关联的MFC中的类:CListBox ######################################################## 1.在列表的结尾添加一项: ...

  5. 高级列表控件ListCtrl关联的MFC中的类:CListCtrl

    高级列表控件ListCtrl关联的MFC中的类:CListCtrl■ 报表样式ListCtrl常用操作:1.添加列标题头:InsertColumn2.获取与设置列宽:GetColumnWidth.Se ...

  6. MFC控件编程之 按钮编辑框.静态文本的使用,以及访问控件的七种方法.

    MFC控件编程之 按钮编辑框.静态文本的使用以及访问控件的七种方法. 一丶按钮.静态文本的通用属性. 他们都有一个属性.就是可以输入标题内容.以及可以自定义控件ID. 创建一个MFC Dlg对话框. ...

  7. MFC控件的SubclassDlgItem

    MFC控件的SubclassDlgItem 要在程序中创建新设计的控件,显然不能用自动创建的办法,因为对话框模板对新控件的特性一无所知.程序可以用手工方法创建控件,在调用派生类的Create函数时,派 ...

  8. MFC 控件初始化的过程

    之前为了学习MFC下浏览器的用法,参考博文:http://www.cnblogs.com/firefly_liu/archive/2009/05/18/1459514.html,虽然按照作者的方法实现 ...

  9. MFC控件编程进度条编写

    MFC控件编程进度条编写 一丶进度条编程需要用到的方法 进度条MFC已经帮我们封装好类了. 叫做 CProgressCtrl  进度条编程也很简单. 封装的方法也就那个那几个. GetPos()  获 ...

随机推荐

  1. com.ibm.msg.client.jms.DetailedJMSSecurityException: JMSWMQ2013: 为队列管理器提供的安全性认证无效

    com.ibm.msg.client.jms.DetailedJMSSecurityException: JMSWMQ2013: 为队列管理器“zm_queue_manager”提供的安全性认证无效, ...

  2. 使用ssh-keygen和ssh-copy-id三步实现SSH无密码登录

    ssh-keygen  产生公钥与私钥对. ssh-copy-id 将本机的公钥复制到远程机器的authorized_keys文件中,ssh-copy-id也能让你有到远程机器的home, ~./ss ...

  3. 【Java集合的详细研究1】Collections类常用方法总结

    1.sort(Collection)方法的使用(含义:对集合进行排序). 例:对已知集合c进行排序? public class Practice { public static void main(S ...

  4. maven2中snapshot快照库和release发布库的应用

    在之前的文章中介绍了maven2中snapshot快照库和release发布库的区别和作用,我今天这里要介绍的是如何在项目中应用snapshot和release库,应用snapshot和release ...

  5. Hadoop学习笔记——WordCount

    1.在IDEA下新建工程,选择from Mevan GroupId:WordCount ArtifactId:com.hadoop.1st Project name:WordCount 2.pom.x ...

  6. recovery中英对照表 recovery大全图解

    一:Recovery主界面 ---reboot system now                         重启手机(刷机完毕选择此项就能重新启动系统) ---apply SDcard:up ...

  7. Link1123:转换到COFF期间失败:文件无效或损坏

        当在编译VS项目时,出现如下错误:         这个错误,表明在连接阶段出错.COFF为Common Object File Format,通用对象文件格式,它的出现为混合语言编程带来方便 ...

  8. 【WP8】自定义配置存储类

    之前在WP7升级到WP8的时候遇到配置不兼容的问题 情景:之前只有一个WP7版本,现在需要发布WP8版本,让用户可以从原来的WP7版本升级到WP8版本 一般情况下从WP7升级到WP8没什么问题 但是在 ...

  9. 续:纠正:debian【4】可以安装,而且完美的安装 ! for《Oracle-10.2.0.1,打补丁10.2.0.5:在 debian 版本4【不含4】以上,及 ubuntu 7.04【不含7.04】以上都可以安装!》

    关键点: ip a ifconfig -a dhclient ifconfig -a poweroff ip a ifconfig -a apt-get update apt-get install ...

  10. qt creator如何实现转到槽功能

    ui_mainwindow.h .