MFC中,因项目需要使用TabControl ,使用过程中发现,MFC中的TabControl与C#的TabControl不同,不能通过属性来创建选项页,只能代码生成绑定。

以下为具体的实现方法步骤:

1.把Tab Control控件放到对话框中的合适位置上。再在对话框类中,声明一个CTabCtrl变量:CTabCtrl m_tab;

变量m_tab用来与对话框中的Tab Control控件交互,为此要在DoDataExchange函数中加入DDX_Control语句:

DDX_Control(pDX, IDC_TAB1, m_tab);//IDC_TAB1是Tab Control控件的ID。

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

接着分别为这两个对话框建立两个类,比如CPage1和CPage2。然后在对话框类头文件中,加入这两个对话框对象。同时增加一个变量int m_CurSelTab,用了表明是哪个Page即将被切换。

int m_CurSelTab;
CPage1 m_page1;
CPage2 m_page2;

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

//为Tab Control增加两个页面
m_tab.InsertItem(, _T("第一页"));
m_tab.InsertItem(, _T("第二页")); //设定在Tab内显示的范围
CRect rc;
m_tab.GetClientRect(rc);////获得TAB控件的坐标
//定位选项卡页的位置,这里可以根据情况自己调节偏移量
rc.top += ;
rc.bottom -= ;
rc.left += ;
rc.right -= ;
//创建两个对话框
m_page1.Create(IDD_DIALOG1, &m_tab);//&m_tab也可以改成Tab的ID
m_page2.Create(IDD_DIALOG2, &m_tab);
//将子页面移动到指定的位置
m_page1.MoveWindow(&rc);
m_page2.MoveWindow(&rc);
//显示子页面
//显示初始页面
m_page1.ShowWindow(SW_SHOW);
m_page2.ShowWindow(SW_HIDE);
//保存当前选择
//m_CurSelTab = 0;
m_tab.SetCurSel();

4.为Tab Control添加消息处理程序OnTcnSelchangeTab1()事件

void CCollectControlDlg::OnTcnSelchangeTab(NMHDR *pNMHDR, LRESULT *pResult)
{
*pResult = ;
switch (m_tab.GetCurSel())
{
case :
m_page1.ShowWindow(SW_SHOW);
m_page2.ShowWindow(SW_HIDE);
break;
case :
m_page1.ShowWindow(SW_HIDE);
m_page2.ShowWindow(SW_SHOW);
break;
default:
break;
}
}

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

    m_page1.UpdateData();
m_page2.UpdateData();

参考链接:

http://blog.csdn.net/hustspy1990/article/details/5425365

http://jingyan.baidu.com/article/93f9803f0b7695e0e46f55a7.html

http://blog.sina.com.cn/s/blog_7050644f0100uagn.html

[MFC] TabControl选项卡的使用的更多相关文章

  1. WinForm中重绘TabControl选项卡标题

    最近开发WinForm频繁使用了TabControl控件,这个控件的选项卡没有BackgroundImage这个属性,那么如何为其各个选项卡添加背景图片呢?(这里说的是每个TabPage的头部,也就是 ...

  2. TabControl 选项卡控件

    TabControl 控件是由System.Windows.Forms.TabControl类提供的,作用就是讲相关的组件组合到一系列选项卡页面上.   MulitiLine 属性用来设置是否显示多行 ...

  3. MFC 创建选项卡

    1.创建三个选项卡Dialog窗体,ID分别改为porpTest1.porpTest2.porpTest3 2.创建三个选项卡类,类名分别为CPropTest1.CPropTest2.CPropTes ...

  4. TabControl选项卡

    <Grid> <TabControl Name="tabControl1"> <TabItem Name="tabItem1"&g ...

  5. c#隐藏tabcontrol选项卡

    隐藏:Tab1.TabPage2.Parent = null;显示:Tab1.TabPage2.Parent =Tab1;tab1为tab控件名,TabPage2为选项卡名.

  6. 实现TabControl 选项卡首个标签缩进的方法

    借用一张网图说明需求 在网上找了一圈,没有找到直接通过API或者重绘TabControl 的解决方法,最后灵机一动想到了一个折(tou)中(lan)的解决办法 Tab1.TabPages.Clear( ...

  7. TabControl关闭选项卡

    关闭TabControl选项卡: Private Sub TabControl_Main_CloseButtonClick(sender As Object, e As EventArgs) Hand ...

  8. WPF——菜单栏及TabControl

    一.先造一个窗体,然后在窗体里面增加菜单栏及原始的TabControl选项卡 <Grid> <Menu> <MenuItem Header="文件" ...

  9. MFC TabCtrl 控件修改标签尺寸

    注意:无论那种方法,都要先设置Tab控件的Style属性为fixed width. 第一种方法 MFC,tabcontrol控件改变标签大小 - CSDN博客 https://blog.csdn.ne ...

随机推荐

  1. shell 简单脚本 2

    #!/bin/bash source /etc/profile APPLICATIONS_HOME="/cpic/cpicapp/cpic_analy/jars" APPLICAT ...

  2. CAD交互绘制云线批注(网页版)

    js中实现代码说明: 动态拖放时的绘制事件: function DoDynWorldDrawFun(dX,dY,pWorldDraw,pData) { //自定义实体的GUID标识符 var sGui ...

  3. Python 解压序列、可迭代对象并赋值给多个变量

    Python数据结构和类型 1.1 解压序列赋值给多个变量 现在有一个包含N个元素的元组或者是序列,怎样将它里面的值解压后同时赋值给N个变量? 解决思路:先通过简单的解压赋值给多个变量,前提是变量的数 ...

  4. shrio 权限管理filterChainDefinitions过滤器配置

    /** * Shiro-1.2.2内置的FilterChain * @see ============================================================= ...

  5. Core Animation演示

    相关代码展示: - (IBAction)toggleRoundCorners:(id)sender { [CATransaction setDisableActions:![_enableAnimat ...

  6. TUN/TAP/VETH

    TUN/TAP虚拟网络设备为用户空间程序提供了网络数据包的发送和接收能力.他既可以当做点对点设备(TUN),也可以当做以太网设备(TAP). TUN/TAP虚拟网络设备的原理: 在Linux内核中添加 ...

  7. docker 运行tomcat 并部署 java web项目

    以下tomcat官方镜像中tomcat:7 和tomcat:8的目录. CATALINA_BASE: /usr/local/tomcat CATALINA_HOME: /usr/local/tomca ...

  8. tiny4412 busybox制作根文件系统rootfs nfs 挂载 ubuntu 14.04

    http://blog.csdn.net/liudijiang/article/details/50555429(转) 首先得要有制作好的uboot和linux内核镜像zImage,先烧录到sd卡里, ...

  9. Knockout v3.4.0 中文版教程-16-控制流-foreach绑定

    2. 控制流 1. foreach绑定 目的 foreach绑定会遍历一个数组,为每个数组项生成重复的元素标记结构并做关联.这在渲染列表或表格的时候特别有用. 假设你的数组是一个监控数组,之后无论你进 ...

  10. android 之 ListView相关

    ListView是一种列表视图,其将ListAdapter所提供的各个控件显示在一个垂直且可滚动的列表中.需要注意的为创建适配器并将其设置给ListView. 1.ArrayAdapter Array ...