转载至 http://blog.csdn.net/jacklam200/archive/2008/08/01/2753797.aspx

一、在对话框视图中加入CTabCtrl控件

资源ID:IDC_TAB,变量名:m_Tab

二、在OnInitDialog()中加入以下代码:
m_Tab.InsertItem(0,"窗口1");
m_Tab.InsertItem(1,"窗口2");
// 创建子窗口实例(事先创建好),将父窗口设为m_Tab
// CChileDlg1 m_dlgChile1;
// CChileDlg2 m_dlgChile2;
m_dlgChile1.Create(IDD_DIALOG_CHILD1,GetDlgItem(IDC_TAB));
m_dlgChile2.Create(IDD_DIALOG_CHILD2,GetDlgItem(IDC_TAB));
// 将子窗口显示在m_Tab范围内
CRect rs;
m_Tab.GetClientRect(rs);
rs.top+=20;
rs.bottom-=4;
rs.left+=4;
rs.right-=4;
m_dlgChile1.MoveWindow(rs);
m_dlgChile2.MoveWindow(rs);
// 默认显示第一个子窗口
m_Tab.SetCurSel(0);
m_dlgChile1.ShowWindow(TRUE);

示例代码
view plaincopy to clipboardprint?
     Item.mask = TCIF_TEXT;  
    int nPages = 2; //3个页面  
 
    for(int nN = 0; nN < nPages; nN++)  
    {  
        switch(nN)  
        {  
        case 0:  
             m_zipDlg.Create(IDD_ZIP,GetDlgItem(IDC_TAB1));   
            break;  
        case 1:  
            m_unZipDlg.Create(IDD_UNZIP,GetDlgItem(IDC_TAB1));  
            break;  
        }  
    }  
 
    for(int nN = 0; nN < nPages; nN++)  
    {  
        switch(nN)  
        {  
        case 0:  
            Item.pszText=_T("ZIP");  
            break;  
        case 1:  
            Item.pszText=_T("UNZIP");  
            break;  
        }  
      
        m_tab.InsertItem(nN,&Item);  
    }  
    m_tab.SetCurSel(0);  
     m_zipDlg.ShowWindow(TRUE);  
Item.mask = TCIF_TEXT;
 int nPages = 2; //3个页面

for(int nN = 0; nN < nPages; nN++)
 {
  switch(nN)
  {
  case 0:
    m_zipDlg.Create(IDD_ZIP,GetDlgItem(IDC_TAB1));
   break;
  case 1:
   m_unZipDlg.Create(IDD_UNZIP,GetDlgItem(IDC_TAB1));
   break;
  }
 }

for(int nN = 0; nN < nPages; nN++)
 {
  switch(nN)
  {
  case 0:
   Item.pszText=_T("ZIP");
   break;
  case 1:
   Item.pszText=_T("UNZIP");
   break;
  }
 
  m_tab.InsertItem(nN,&Item);
 }
 m_tab.SetCurSel(0);
  m_zipDlg.ShowWindow(TRUE);

三、响应m_Tab的TCN_SELCHANGE消息,实现切换页面功能
void CMyDlg::OnSelchangeTab(NMHDR* pNMHDR, LRESULT* pResult)
{
int nCurSel = m_Tab.GetCurSel();

switch(nCurSel)
{
case 0: // 显示子窗口1
    m_dlgChile1.ShowWindow(TRUE);
    m_dlgChile2.ShowWindow(FALSE);
    break;
case 1: // 显示子窗口2
     m_dlgChile1.ShowWindow(FALSE);
    m_dlgChile2.ShowWindow(TRUE);
    break;
}
*pResult = 0;
}
------------------------------------------------------------------------------------------------------
windows mobile的
PROPSHEETHEADER psh;
 PROPSHEETPAGE psp[2];
 int i = 0;
 memset(&psh, 0, sizeof(PROPSHEETHEADER));
 for(i = 0; i < 2; i++)
 {
  psp[i].dwSize    = sizeof(PROPSHEETPAGE);
  psp[i].dwFlags   = PSP_DEFAULT | PSP_USETITLE;
  psp[i].hInstance = g_hInst;
  psp[i].lParam    = (LPARAM)hWnd;
 }
 psp[0].pszTitle      = TEXT("压缩文件");
 psp[0].pszTemplate   = MAKEINTRESOURCE(IDD_ZIPFILE);
 psp[0].pfnDlgProc    = (DLGPROC)ZipDlgProc;
 psp[1].pszTitle      = TEXT("解压文件");
 psp[1].pszTemplate   = MAKEINTRESOURCE(IDD_UNZIP);
 psp[1].pfnDlgProc    = (DLGPROC)UnzipDlgProc;
 psh.dwSize           = sizeof(PROPSHEETHEADER);
 psh.dwFlags          = PSH_PROPSHEETPAGE | PSH_MAXIMIZE;
 psh.hwndParent       = hWnd;
 psh.hInstance        = g_hInst;
 //psh.pszCaption       = TEXT("Prop Sheet Title");
 psh.nPages           = 2;
 psh.nStartPage       = 0;
 psh.ppsp             = psp;
 psh.pfnCallback      = 0;
 i = PropertySheet(&psh);

CTabCtrl的更多相关文章

  1. 在CTabCtrl上动态创建CListCtrl控件

    m_List.Create(WS_OVERLAPPED|WS_CHILD|WS_VISIBLE|LVS_REPORT|LVS_AUTOARRANGE|LVS_SHOWSELALWAYS|LVS_EDI ...

  2. CTabCtrl的使用

    1.在主窗口中定义一个CtabCtrl,添加变量m_tabctrl; 2.添加两个子窗口IDD_ONE_DIALOG,IDD_TWO_DIALOG(新建对话框,然后双击界面添加头文件和cpp),属性为 ...

  3. CTabCtrl - 如何使用TabCtrl控件

    CTabCtrl - 如何使用TabCtrl控件 建立一个基于对话框的MFC应用程序TabCtrlTest Step 1:在资源视图中,新建对话框资源,资源ID:IDD_TabCtrlExample_ ...

  4. mfc CTabCtrl

    知识点: CTabCtrl常用属性 CTabCtrl类常用成员函数 CTabCtrl代码示例 一.CTabCtrl控件属性 Bottom:底部样式 Vertical:垂直样式 与Bottom结合使用, ...

  5. MFC控件CTabCtrl关联变量

    1.先建立一个对话框MFC应用程序,然后在工具箱里面把Tab Control控件放到对话框中的合适位置上. 再在对话框类中,将该控件绑定一个变量 用两种方法: 1 ) 自己定义成员变量 CTabCtr ...

  6. CTabCtrl控件标签的相关设置

    原文链接: http://blog.csdn.net/happyhell/article/details/6012177 1. 获得CTabCtrl标签高度:CRect rc; CTabCtrl *p ...

  7. duilib各种布局的作用,相对布局与绝对布局的的意义与用法

    大多数刚使用duilib的朋友时候非常依赖duilib自带的设计器,用他可以拖拉控件,可视化的做出自己想要的界面.可是用一段时间就会发现原带的设计器有很多bug,时不时会崩溃,支持的控件数量有限,属性 ...

  8. mfc ui3

    引用:http://www.cnblogs.com/rainbowzc/archive/2010/06/02/1749872.html 本文专题讨论VC中的界面美化,适用于具有中等VC水平的读者.读者 ...

  9. PeCheck

    早上起来看到这个代码  整理一下 // PETableDlg.cpp : 实现文件 // #include "stdafx.h" #include "PECheck.h& ...

随机推荐

  1. docker Swarm 集群发现

    Node 发现 $swarm manage --discovery dockerhost01:,dockerhost02:,dockerhost03: -H= 文件发现 $swarm manage - ...

  2. iOS本地推送与远程推送详解

    一.简介 分为本地推送和远程推送2种.可以在应用没有打开甚至手机锁屏情况下给用户以提示.它们都需要注册,注册后系统会弹出提示框(如下图)提示用户是否同意,如果同意则正常使用:如果用户不同意则下次打开程 ...

  3. Hibernate 系列教程1-枚举单例类

    你还在为不知道怎样正确使用Hibernate而纠结吗 你还在为不知道怎样配置映射文件而郁闷吗 枚举单例(Enum Singleton) 是实现单例模式的一种方式而已,不过写法简单,创建枚举默认也是线程 ...

  4. POJ 1067 取石子游戏 威佐夫博弈

    威佐夫博弈(Wythoff Game):有两堆各若干个物品,两个人轮流从某一堆或同时从两堆中取同样多的物品,规定每次至少取一个,多者不限,最后取光者得胜. 我们用(ak,bk)(ak ≤ bk ,k= ...

  5. HDU 2255 奔小康赚大钱 KM算法的简单解释

    KM算法一般用来寻找二分图的最优匹配. 步骤: 1.初始化可行标杆 2.对新加入的点用匈牙利算法进行判断 3.若无法加入新编,修改可行标杆 4.重复2.3操作直到找到相等子图的完全匹配. 各步骤简述: ...

  6. hiho#1128 : 二分·二分查找

    input 1<=n<=1e6 1<=k<=2*1e9 a1 a2 ... an 1<=an<=2*1e9 output k存在则输出k是第几大的数,否则输出-1 ...

  7. UIScreen的scale属性

    用来表示显示屏的像素密度与点坐标系统之间的关系.通过该属性,我们可以把视图中逻辑坐标系统里的点坐标转换成设备的物理像素坐标.在配有Retina显示屏的设备中,scale值是2.0,而在非Retina显 ...

  8. sql 按时间二段排序

    业务需用为数据按倒序排序,当天数据排在以往日期前面,但当天数据需按小时进行升序排列 select *from( select vcTitle,dtBeginDate,case when dtBegin ...

  9. js 基础笔记三

    词法结构: 1:区分大小写 2:特殊字符的区分,unicode转义 3:注释, //  ;  /* */ ; 4 : 标识字符和保留字 数据类型: 1原始类型 数字,字符串,布尔值.特殊的原始值(nu ...

  10. 把Ubuntu用户目录下的目录名改成英文

    直接改名字是不行的,一重启就回去了 方法一: 把中文文件夹改成相应的英文文件夹,再修改配置文件 ~/.config/user-dirs.dirs XDG_DESKTOP_DIR="$HOME ...