• MFC程序示例


    打开VS2019,先基于对话框创建一个MFC应用程序MFCSample。删除对话框默认生成的控件。

    在这里插入图片描述
    在这里插入图片描述
    经观察,可见发现,默认生成的工程中一共存在三个类:

    1. CAboutDialog
    2. CMFCSampleApp
    3. CMFCSampleDlg

    主对话框类CMFCSampleDlg继承自CDialogEx,除了标准默认构造函数CMFCSampleDlg(CWnd* pParent = nullptr)外,还存在5个函数:

    • DoDataExchange(CDataExchange* pDX)
    • OnInitDialog()
    • OnPaint()
    • OnQueryDragIcon()
    • OnSysCommand(UINT nID, LPARAM lParam)

    AppCMFCSampleApp实例化一个唯一的对象theApp,程序初始化函数InitInstance()作为程序的入口。

    在工具箱中拖入一个Group Box控件,将文本修改为:参数

    再拖入六个静态文本控件,各自关联变量后,将其放入Group Box控件中。

    再拖入六个按钮控件,各自关联变量后,将其布局在Group Box控件下方。

    在这里插入图片描述
    该界面右侧拟准备放入Tab Control控件,每个标签页都是基于对话框的。参考文章:https://www.cnblogs.com/tinaluo/p/9675586.html

    在这里插入图片描述
    运行后,Tab Control控件中没有内容显示,因为还没有添加内容。

    在这里插入图片描述

    因此,先插入两个对话框备用,为两个对话框添加基于对话框的类:MyTabDlg1MyTabDlg2,现在的问题是如何将两个对话框插入到上述的标签页中。
    在这里插入图片描述
    记住,修改对话框的两个属性

    在这里插入图片描述

    首先,在主窗口类CMFCSampleDlg中,先将Tab Control控件关联变量m_Tab

    在这里插入图片描述
    再在该类中手动添加两个对话框的实例化变量,注意将头文件添加上。

    在这里插入图片描述
    此外,为了后续Tab标签页的切换,需要在类中添加两个变量

    int m_CurSelTab;
    CDialog* pDialog[5];  //用来保存对话框对象指针
    
    • 1
    • 2

    接下来,便可以利用m_Tab变量将两个对话框变量dlg1dlg2添加进标签页。

    CMFCSampleDlg::OnInitDialog()函数中添加初始化代码

    // 添加选项卡
    m_Tab.InsertItem(0, _T("标签页1"));
    m_Tab.InsertItem(1, _T("标签页2"));
    m_Tab.InsertItem(2, _T("标签页3"));
    m_Tab.InsertItem(3, _T("标签页4"));
    m_Tab.InsertItem(4, _T("标签页5"));
    
    //创建两个对话框
    dlg1.Create(IDD_DIALOG1, &m_Tab);
    dlg2.Create(IDD_DIALOG2, &m_Tab);
    
    //设定在Tab内显示的范围
    CRect rc;
    m_Tab.GetClientRect(rc);
    rc.top += 30;
    rc.bottom -= 0;
    rc.left += 0;
    rc.right -= 0;
    dlg1.MoveWindow(&rc);
    dlg2.MoveWindow(&rc);
    
    //把对话框对象指针保存起来
    pDialog[0] = &dlg1;
    pDialog[1] = &dlg2;
    
    //显示初始页面
    pDialog[0]->ShowWindow(SW_SHOW);
    pDialog[1]->ShowWindow(SW_HIDE);
    
    //保存当前选择  
    m_CurSelTab = 0;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31

    并添加Tab Control控件切换的消息处理函数

    void CMFCSampleDlg::OnTcnSelchangeTab2(NMHDR* pNMHDR, LRESULT* pResult)
    {
    	// TODO: 在此添加控件通知处理程序代码
    	//把当前的页面隐藏起来 
    	pDialog[m_CurSelTab]->ShowWindow(SW_HIDE);
    	//得到新的页面索引 
    	m_CurSelTab = m_Tab.GetCurSel();
    	//把新的页面显示出来 
    	pDialog[m_CurSelTab]->ShowWindow(SW_SHOW);
    	*pResult = 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    最终效果

    在这里插入图片描述
    在这里插入图片描述

  • 相关阅读:
    Unix System V BSD POSIX 究竟是什么?
    密码登录虽安全,但有时很麻烦!如何禁用或删除Windows 11中的密码登录
    PowerCLi VMware vCenter 通过自建的PXE Server一键批量部署常规New-VM
    vue实现一个鼠标滑动预览视频封面组件
    11.1 校招 实习 内推 面经
    【docker】docker的基础命令
    一招搞定,终止端口号进程
    qtdesigner使用树形控件实现堆叠布局
    Anaconda删除虚拟环境
    排列组合初赛详解
  • 原文地址:https://blog.csdn.net/Star_ID/article/details/126558358