zoukankan      html  css  js  c++  java
  • MFC中 Tab Control 控件的使用

    实现的功能:

           在一个标签控件中加入两个标签页,标签文本分别为“标签1”和“标签2”,点击不同的标签显示不同的标签页。

    具体步骤如下:

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

           2. 在自动生成的对话框模板IDD_TESTTAP_DIALOG中,删除“TODO: Place dialog controls here.”静态文本框、“OK”按钮和“Cancel”按钮。添加一个Tab Control控件,并为其关联一个CTabCtrl类型的控件变量m_tab。

           3. 添加两个基于MFC对话框的类,类名为CTab1Dlg,CTab2Dlg。在资源视图里,就自动新生成了两个对话框IDD_TAB1DLG和IDD_TAB2DLG。然后两者都将Border属性设为 None,Style属性设为Child。

           4. 在“TestTapDlg.h”文件中添加头文件:

                  #include “Tab1Dlg.h” 

                  #include “Tab2Dlg.h”

              然后继续在“TestTapDlg.h”文件中为CTestTapDlg类添加两个成员变量:

                  CTab1Dlg m_tab1Dlg;
                  CTab2Dlg m_tab2Dlg;

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

    BOOL CTestTapDlg::OnInitDialog()
    {
        CDialogEx::OnInitDialog();
    
        // 将“关于...”菜单项添加到系统菜单中。
    
        // IDM_ABOUTBOX 必须在系统命令范围内。
        ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
        ASSERT(IDM_ABOUTBOX < 0xF000);
    
        CMenu* pSysMenu = GetSystemMenu(FALSE);
        if (pSysMenu != NULL)
        {
            BOOL bNameValid;
            CString strAboutMenu;
            bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
            ASSERT(bNameValid);
            if (!strAboutMenu.IsEmpty())
            {
                pSysMenu->AppendMenu(MF_SEPARATOR);
                pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
            }
        }
    
        // 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
        //  执行此操作
        SetIcon(m_hIcon, TRUE);            // 设置大图标
        SetIcon(m_hIcon, FALSE);        // 设置小图标
    
        // TODO: 在此添加额外的初始化代码
    
        //初始化标签控件
        CRect tabRect;   // 标签控件客户区的位置和大小
        m_tab.InsertItem(0, _T("标签1")); // 插入第一个标签
        m_tab.InsertItem(1, _T("标签2"));  // 插入第二个标签
        
        m_tab1Dlg.Create(IDD_POETSORTDLG, &m_tab);    // 创建第一个标签页   
        m_tab2Dlg.Create(IDD_POETRYSORTDLG, &m_tab); // 创建第二个标签页   
        
        m_tab.GetClientRect(&tabRect);    // 获取标签控件客户区Rect 
        
        // 调整tabRect,使其覆盖范围适合放置标签页   
        tabRect.left += 25;                  
        tabRect.right -= 1;   
        tabRect.top += 1;   
        tabRect.bottom -= 1;
       
        // 根据调整好的tabRect放置m_poetsortDlg子对话框,并设置为显示   
        m_tab1Dlg.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_SHOWWINDOW);   
        // 根据调整好的tabRect放置m_poetrysortDlg子对话框,并设置为隐藏   
        m_tab2Dlg.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_HIDEWINDOW);
    
        return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
    }

          

           6. 运行程序,查看结果,这时我们发现切换标签时,标签页并不跟着切换,而总是显示标签1。

           7. 我们要实现的是标签页的切换效果,所以还要为m_tab标签控件的通知消息TCN_SELCHANGE添加处理函数,并修改如下:

    void CTestTapDlg::OnTcnSelchangeTab1(NMHDR *pNMHDR, LRESULT *pResult)
    {
        // TODO: 在此添加控件通知处理程序代码
        *pResult = 0;
    
        CRect tabRect;    // 标签控件客户区的Rect   
      
        // 获取标签控件客户区Rect,并对其调整,以适合放置标签页   
        m_tab.GetClientRect(&tabRect);   
        tabRect.left += 25;   
        tabRect.right -= 1;   
        tabRect.top += 1;   
        tabRect.bottom -= 1;   
      
        switch (m_tab.GetCurSel())   
        {   
        // 如果标签控件当前选择标签为“标签1”,则显示m_tab1Dlg对话框,隐藏m_tab2Dlg对话框   
        case 0:   
            m_tab1Dlg.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_SHOWWINDOW);   
            m_tab2Dlg.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_HIDEWINDOW);   
            break;   
        // 如果标签控件当前选择标签为“标签2”,则隐藏m_tab1Dlg对话框,显示m_tab2Dlg对话框   
        case 1:   
            m_tab1Dlg.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_HIDEWINDOW);   
            m_tab2Dlg.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_SHOWWINDOW);   
            break;   
        default:   
            break;   
        }   
    }

       8.运行程序,大功告成~~~ ^_^

  • 相关阅读:
    【jQuery】添加删除记录练习
    git
    常用正则表达式
    【资源】前端插件
    menu 菜单显示隐藏-jquery实现
    java作业——Day006
    java作业——Day005
    java作业——Day004
    java作业——Day003
    java作业——Day001
  • 原文地址:https://www.cnblogs.com/lxt287994374/p/3116354.html
Copyright © 2011-2022 走看看