• [MFC] TabControl选项卡的使用


    MFC中,因项目需要使用TabControl ,使用过程中发现,MFC中的TabControl与C#的TabControl不同,不能通过属性来创建选项页,只能代码生成绑定。

    以下为具体的实现方法步骤:

    1.把Tab Control控件放到对话框中的合适位置上。再在对话框类中,声明一个CTabCtrl变量:CTabCtrl m_tab;

    变量m_tab用来与对话框中的Tab Control控件交互,为此要在DoDataExchange函数中加入DDX_Control语句:

    DDX_Control(pDX, IDC_TAB1, m_tab);//IDC_TAB1是Tab Control控件的ID。

    2.建立两个对话框程序,用来当做Tab Control控件的两个页。别忘了把Style改为Child,Border改为None。然后就可以在上面加其他控件了。

    接着分别为这两个对话框建立两个类,比如CPage1和CPage2。然后在对话框类头文件中,加入这两个对话框对象。同时增加一个变量int m_CurSelTab,用了表明是哪个Page即将被切换。

    int m_CurSelTab; 
    CPage1 m_page1; 
    CPage2 m_page2; 

    3.在对话框类的初始化函数中需要把CPage1、CPage2和Tab Control关联起来,并保存页面地址,设置初始页面。

    //为Tab Control增加两个页面
    m_tab.InsertItem(0, _T("第一页"));
    m_tab.InsertItem(1, _T("第二页"));
    
    //设定在Tab内显示的范围
    CRect rc;
    m_tab.GetClientRect(rc);////获得TAB控件的坐标
    //定位选项卡页的位置,这里可以根据情况自己调节偏移量
    rc.top += 20;
    rc.bottom -= 0;
    rc.left += 0;
    rc.right -= 0;
    //创建两个对话框
    m_page1.Create(IDD_DIALOG1, &m_tab);//&m_tab也可以改成Tab的ID
    m_page2.Create(IDD_DIALOG2, &m_tab);
    //将子页面移动到指定的位置
    m_page1.MoveWindow(&rc);
    m_page2.MoveWindow(&rc);
    //显示子页面
    //显示初始页面
    m_page1.ShowWindow(SW_SHOW);
    m_page2.ShowWindow(SW_HIDE);
    //保存当前选择
    //m_CurSelTab = 0;
    m_tab.SetCurSel(0);

    4.为Tab Control添加消息处理程序OnTcnSelchangeTab1()事件

    void CCollectControlDlg::OnTcnSelchangeTab(NMHDR *pNMHDR, LRESULT *pResult)
    {
        *pResult = 0;
        switch (m_tab.GetCurSel())
        {
            case 0:
                m_page1.ShowWindow(SW_SHOW);
                m_page2.ShowWindow(SW_HIDE);
                break;
            case 1:
                m_page1.ShowWindow(SW_HIDE);
                m_page2.ShowWindow(SW_SHOW);
                break;
            default:
                break;
        }
    }

    5.如果要在Tab Control控件外面获取其内部对话框中控件的数据,就需要使用DDX/DDV机制,还要调用相应的UpdateData函数。

        m_page1.UpdateData(); 
        m_page2.UpdateData();

    参考链接:

    http://blog.csdn.net/hustspy1990/article/details/5425365

    http://jingyan.baidu.com/article/93f9803f0b7695e0e46f55a7.html

    http://blog.sina.com.cn/s/blog_7050644f0100uagn.html

  • 相关阅读:
    MySql清空所有表数据【慎用】
    积分墙已死?积分墙冲榜失效?请看看别人怎么玩转积分墙!
    [转]小心PHP的类定义顺序与继承的问题
    [转]PHP中替换换行符
    [转]php的public、protected、private三种访问控制模式的区别
    [转]Zend Studio中将tab转换为4个空格
    PHP预定义常量
    PHP Unit资料收集
    『Python』setup.py简介
    『计算机视觉』Mask-RCNN_项目文档翻译
  • 原文地址:https://www.cnblogs.com/zwh0214/p/6292128.html
Copyright © 2020-2023  润新知