VS2017 + MFC对话框中创建子对话框

文章目录

          • MFC实现创建多个子对话框

MFC实现创建多个子对话框

  由于使用的平台是VS2017,查阅网上的资料大多是旧版本的操作步骤,因此借鉴了(VS2013)MFC对话框中用多个按钮创建多个子对话框实现选项卡效果和MFC实现子对话框间切换两位博主的博客进行设计,步骤如下:

  • 创建一个MFC对话框工程,添加三个Button控件。对每个Button添加变量:分别右键Button1,Button2,Button3=》添加变量=》分别添加名称button1,button2,button3
  • 添加MFC类:CChildDlg1,CChildDlg2,CChildDlg3
    • ①首先说一种简洁办法:右键项目=》添加=》新建项=》MFC=》MFC类,类名即上述三个
    • VS2017 + MFC对话框中创建子对话框_第1张图片
    • 基类选择CDialog,并可命名对话框ID,创建后设置每个对话框窗体的style为child;在工程头文件···Dlg.h中包含每个子对话框类的头文件,并声明出每个类的对象CChildDlg1 childDlg1;CChildDlg2 childDlg2;CChildDlg3 childDlg3;
    • ②右键···-Dialog对话框=》添加类
      VS2017 + MFC对话框中创建子对话框_第2张图片
      类名分别是CChildDlg1,CChildDlg2,CChildDlg3,基类是CDialog,对话框ID先不用设置
    • 视图=》资源视图 =》Dialog =》右键···_DIALOG文件=》添加资源=》选择Dialog
      VS2017 + MFC对话框中创建子对话框_第3张图片
      设置每个对话框的style为child
    • 分别打开CChildDlg1.h,CChildDlg2.h,CChildDlg3.hCChildDlg1.cpp,CChildDlg2.cpp,CChildDlg3.cpp修改加入对应的子对话框ID
    • 在这里插入图片描述
    • VS2017 + MFC对话框中创建子对话框_第4张图片
  • 在工程头文件···Dlg.h中包含每个子对话框类的头文件,并声明出每个类的对象CChildDlg1 childDlg1;CChildDlg2 childDlg2;CChildDlg3 childDlg3;
  • 按钮的操作有两种实现方式:
    • 点击一个按钮时将此按钮置为不可用,将其他按钮置为可用,销毁其他子对话框,创建本按钮对应的子对话框,这种方式比较节省内存,但是每次需要重新创建子对话框,比界面切换会不流畅
      • 在每个子对话框类中重载OnCanel函数,并将其改为
        void CChildDlg1::OnCancel()
        {
        	// TODO:  在此添加专用代码和/或调用基类	
        	DestroyWindow();
        }
        
      • 进入Button1的响应函数中,添加以下代码
            button1.EnableWindow(FALSE);//设置button1为不可用
            button2.EnableWindow(TRUE);
            button3.EnableWindow(TRUE);
            childDlg1.Create(IDD_CHILDDLG1, this);
            childDlg1.SetWindowPos(NULL, 20, 50, 0, 0, SWP_NOSIZE | SWP_NOZORDER | SWP_NOACTIVATE);//设置窗口相对于父窗口的位置
            childDlg1.ShowWindow(SW_SHOW);//设置childDlg1对话框为可见
            childDlg2.OnCancel();//销毁child2子对话框
            childDlg3.OnCancel();
        
      • 对于其它两个按钮添加类似的代码(注意逻辑)
    • 在主对话框的OnInitDialog函数中创建每个子对话框,并将第一个按钮设置为不可用,然后在各个按钮的点击事件中用显示与隐藏的方法达到选项卡的效果,这种方法每个子对话框都存在于内存中,比较消耗资源,但是界面切换比较流畅
      • 在主对话框中创建各个对话框
        	// TODO: 在此添加额外的初始化代码
        
        	button1.EnableWindow(FALSE);
        	childDlg1.Create(IDD_DIALOG1, this);
        	childDlg1.SetWindowPos(NULL, 20, 50, 0, 0, SWP_NOSIZE | SWP_NOZORDER | SWP_NOACTIVATE);
        	childDlg1.ShowWindow(SW_HIDE);
        	childDlg2.Create(IDD_DIALOG2, this);
        	childDlg2.SetWindowPos(NULL, 20, 50, 0, 0, SWP_NOSIZE | SWP_NOZORDER | SWP_NOACTIVATE);
        	childDlg2.ShowWindow(SW_HIDE);
        	childDlg3.Create(IDD_DIALOG3, this);
        	childDlg3.SetWindowPos(NULL, 20, 50, 0, 0, SWP_NOSIZE | SWP_NOZORDER | SWP_NOACTIVATE);
        	childDlg3.ShowWindow(SW_HIDE);
        
      • 在各个按钮响应函数中显示与隐藏子对话框
        	// TODO: 在此添加控件通知处理程序代码
        	button1.EnableWindow(FALSE);
        	button2.EnableWindow(TRUE);
        	button3.EnableWindow(TRUE);
        	childDlg1.ShowWindow(SW_SHOW);
        	childDlg2.ShowWindow(SW_HIDE);
        	childDlg3.ShowWindow(SW_HIDE);
        

VS2017 + MFC对话框中创建子对话框_第5张图片

你可能感兴趣的:(C/C++)