转载至 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. 自己写的select元素可编辑、可筛选JQuery插件 jquery.inputselectbox.js

    /* 功能:实现对select下拉框可输入的功能, 输入时会对下拉框的内容进行动态过滤. 参数:没有选择任何值时默认显示的文字 如何使用:$("#firstLevel").inpu ...

  2. velocity 教程

    1,<title> $!{product.name} - $!{title} $!{about.title} - $!{title} $!{news.title} - $!{title} ...

  3. dip2px

    package com.itheima.zhbj.utils; import android.content.Context; public class DensityUtils { public s ...

  4. 巧妙利用ToArray()函数移除集合中的元素

    当我们对集合foreach遍历时,不能直接移除遍历的集合的元素,解决的方法有很多种,见我之前的随笔: http://www.cnblogs.com/527289276qq/p/4331000.html ...

  5. Windsock套接字I/O模型学习 --- 第一章

    1. I/O模型共有以下几种: 阻塞(blocking)模型 选择(select)模型 WSAAsyncSelect模型 WSAEventSelect模型 重叠(overlapped)模型 完成端口( ...

  6. Greedy Change

    Greedy Change time limit per test 2 seconds memory limit per test 256 megabytes input standard input ...

  7. 重启oracle数据库的一次操作命令和alter日志。

    今天重启oracle数据库的命令和alter日志: oracle@NMSSERVER1:~> sqlplus '/as sysdba' SQL*Plus: Release 11.2.0.3.0 ...

  8. 使用React Native一年后的感受

    转载自:http://www.dobest.me/blog/2016/06/12/%E4%BD%BF%E7%94%A8React%20Native%E4%B8%80%E5%B9%B4%E5%90%8E ...

  9. [转]SSL协议详解

    背景介绍    最近在看<密码学与网络安全>相关的书籍,这篇文章主要详细介绍一下著名的网络安全协议SSL. 在开始SSl介绍之前,先给大家介绍几个密码学的概念和相关的知识.     1.密 ...

  10. U盘安装Centos后拔除U盘无法启动问题解决方法

    今天安装CentOS后发现把引导文件安装在U盘上了,所以不插U盘就无法进入CentOS系统,在网上找到这种方法成功摆脱U盘启动,避免重新用U盘做引导盘安装系统,简单省事,所以发个帖,留着以后备用. 1 ...