【vs2010中MFC调用TabControl的使用学习】

参考

鸡啄米的教程.
丶布布的教程

正文

  1. 创建一个基于对话框的MFC工程,名称设置为Test_TabControl

  2. 资源视图—>右键Dialog,插入两个需要在Tab Control控件上显示的子对话框,IDD_DIALOG1IDD_DIALOG2

  3. 在主对话框或是两个子对话框中,空白处右键—>添加类,若选择了类向导,则在弹出的类向导中需将默认的基类从CWnd改为CDialogEx。然后添加两个子对话框IDD_DIALOG1IDD_DIALOG2对应的类,假设类名为CDIALOG1CDIALOG2
    在这里插入图片描述
    在这里插入图片描述

  4. 将在资源视图下增加的两个对话框的属性进行修改。分别切换到IDD_DIALOG1IDD_DIALOG2对话框界面,在属性栏中的外观栏下,将Border改为NoneStyle改为child
    在这里插入图片描述
    在这里插入图片描述

  5. 在主对话框Test_TabControlDlg.h中包含上述两个对话框的头文件,这里也即包含“JzmDlg.h”和“AndroidDlg.h”两个头文件

#include "AndroidDlg.h"
#include "JzmDlg.h"

在这里插入图片描述

然后继续在“Test_TabControlDlg.h”文件中为CTest_TabControlDlg类添加两个成员变量: CJzmDlg m_jzmDlg和 CAndroidDlg m_androidDlg;

	CJzmDlg m_jzmDlg;
    CAndroidDlg m_androidDlg;

在这里插入图片描述

  1. 在CTest_TabControlDlg对话框初始化时,我们也初始化标签控件。修改CTest_TabControlDlg::OnInitDialog()函数如下:

在注释 :

// TODO: 在此添加额外的初始化代码

之后添加如下的代码:

   	CRect tabRect;   // 标签控件客户区的位置和大小   
  
    m_tab.InsertItem(0, _T("测试1"));         // 插入第一个标签
    m_tab.InsertItem(1, _T("测试2"));  // 插入第二个标签
    m_jzmDlg.Create(IDD_DIALOG1, &m_tab);    // 创建第一个标签页   
    m_androidDlg.Create(IDD_DIALOG2, &m_tab); // 创建第二个标签页   
  
    m_tab.GetClientRect(&tabRect);    // 获取标签控件客户区Rect   
    // 调整tabRect,使其覆盖范围适合放置标签页   
    tabRect.left += 1;                  
    tabRect.right -= 1;   
    tabRect.top += 25;   
    tabRect.bottom -= 1;   
    // 根据调整好的tabRect放置m_jzmDlg子对话框,并设置为显示   
    m_jzmDlg.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_SHOWWINDOW);   
    // 根据调整好的tabRect放置m_androidDlg子对话框,并设置为隐藏   
    m_androidDlg.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_HIDEWINDOW);

在这里插入图片描述

  1. 运行程序,查看结果,这时我们发现切换标签时,标签页并不跟着切换,而总是显示一个对话框。 我们要实现的是标签页的切换效果,所以还要为m_tab标签控件的通知消息TCN_SELCHANGE添加处理函数,双击Tab control控件,并添加如下代码:
CRect tabRect;    // 标签控件客户区的Rect   
  
    // 获取标签控件客户区Rect,并对其调整,以适合放置标签页   
    m_tab.GetClientRect(&tabRect);   
    tabRect.left += 1;   
    tabRect.right -= 1;   
    tabRect.top += 25;   
    tabRect.bottom -= 1;   
  
    switch (m_tab.GetCurSel())   
    {
    
       
    // 如果标签控件当前选择标签1,则显示m_jzmDlg对话框,隐藏m_androidDlg对话框   
    case 0:   
        m_jzmDlg.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_SHOWWINDOW);   
        m_androidDlg.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_HIDEWINDOW);   
        break;   
    // 如果标签控件当前选择标签2,则隐藏m_jzmDlg对话框,显示m_androidDlg对话框   
    case 1:   
        m_jzmDlg.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_HIDEWINDOW);   
        m_androidDlg.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_SHOWWINDOW);   
        break;   
    default:   
        break;   
    }   

在这里插入图片描述

  1. 再运行程序,最终的标签页切换效果如下面两图:
    在这里插入图片描述

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/alansss/article/details/123769547