无符号整形 发表于 2016-11-27 17:52:38

【MFC入门文字教程】22-标签页控件(CTabCtrl)

标签页控件是什么呢?

懂了吧!如果对一个标签页控件添加变量的话,变量类型就是CTabCtrl的。

CTabCtrl有什么成员函数呢?https://msdn.microsoft.com/zh-cn/library/essk9hbw(v=vs.120).aspx
(重要提示:请大家认真看msdn文档,否则你可能会看不懂下面的例子)
另外至于可以添加什么事件处理程序,请大家试试。

实践时间!

本次例子比较复杂,UINT担心大家看不懂,就破例给大家讲解下。
1.在资源文件上选择添加->资源

2.选择Dialog,然后点击“新建(N)”

3.重复第二步,即创建2个对话框(因为一会儿有2个标签)
4.(关键一步)把2个对话框的Style属性都设置为Child,把Border设置为None。
5.给第一个对话框拖一个Static Text,把Caption属性设置为“我是标签页1”,给第二个对话框拖一个Static Text,把Caption属性设置为“我是标签页2”
6.给第一个对话框添加类,类名就是CDlg1,给第二个对话框添加类,类名就是CDlg2

7.在[你的工程名]Dlg.h里面包含Dlg1.h和Dlg2.h
8.在[你的工程名]Dlg.h里面的C[你的工程名]Dlg类添加如下内容(你可能会问要什么访问属性,随你,public 即可)
CDlg1 m_Dlg1;
CDlg2 m_Dlg2;
9.在OnInitDialog中添加如下代码
        CRect tabRect;   // 标签控件客户区的位置和大小   

        m_tab.InsertItem(0, _T("标签页1"));         // 插入第一个标签“标签页1”   
        m_tab.InsertItem(1, _T("标签页2"));// 插入第二个标签“标签页2”   
        m_Dlg1.Create(IDD_DIALOG1, &m_tab);    // 创建第一个标签页   
        m_Dlg2.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_Dlg1.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_SHOWWINDOW);//注意!这里不能用ShowWindow!!
        // 根据调整好的tabRect放置m_androidDlg子对话框,并设置为隐藏   
        m_Dlg2.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_HIDEWINDOW);//注意!这里不能用ShowWindow!!
如果现在就运行,你会看到无法切换标签页。
所以我们要添加TCN_SELCHANGE(选择切换)的事件处理程序。
10.添加TCN_SELCHANGE(选择切换)的事件处理程序。
11.在TCN_SELCHANGE的事件处理程序中添加以下代码。
        CRect tabRect;
        m_tab.GetClientRect(&tabRect);
        tabRect.left += 1;
        tabRect.right -= 1;
        tabRect.top += 25;
        tabRect.bottom -= 1;

        switch (m_tab.GetCurSel())
        {
        case 0:// 如果标签控件当前选择标签为“标签页1”,则显示m_Dlg1对话框,隐藏m_Dlg2对话框   
                m_Dlg1.ShowWindow(SW_SHOW);
                m_Dlg2.ShowWindow(SW_HIDE);
                break;
        case 1:// 如果标签控件当前选择标签为“标签页2”,则隐藏m_Dlg1对话框,显示m_Dlg2对话框   
                m_Dlg1.ShowWindow(SW_HIDE);
                m_Dlg2.ShowWindow(SW_SHOW);
                break;
        }
现在运行,就好了~

下期预告
动画控件!动画控件!动画控件!
重要的事情说三遍!!!

zyslqr 发表于 2019-8-6 15:18:05

学习

Cuibaile 发表于 2019-10-25 18:29:10

m_tab是什么呀
页: [1]
查看完整版本: 【MFC入门文字教程】22-标签页控件(CTabCtrl)