首页
社区
课程
招聘
父对话框与子对话框间值的传递,弹出子对话框
发表于: 2016-10-24 19:20 4053

父对话框与子对话框间值的传递,弹出子对话框

2016-10-24 19:20
4053
准备工作:
1、建立父窗口对话框,ParentDlg.h文件(MFC类)
2、建立一个数据类,Data.h文件(普通类)
3、建立子窗口对话框,ChildDlg.h文件(MFC类)

一、Data.h中数据在父窗口中显示
1、//Data.h文件
类中定义一个Cstring m_str;变量和一个方法函数void Data();
//Data.cpp文件
void 类名::Data(){
        //添加这个方法的实现代码
        比如:m_str = _T("测试Test");
}
2、在父窗口对话框资源中建立一个Eidt控件,给这个Edit控件添加Edit控件类型的变量,变量名m_EditCtrl_Parent
ParentDlg.h文件
类中定义一个数据类的指针对象,和一个方法函数void ParentDlg();
//类名* 对象名(Data.h文件)
          比如:CData* m_Data;
//ParentDlg.cpp文件
void 父窗口类名::ParentDlg(){
            //添加这个方法的实现代码
            比如:m_Data->Data();       //数据类指向数据类中的方法
                        m_EditCtrl_Parent.SetWindowText(m_Data->m_str);   //把数据类中的值显示在父窗口对话框Edit控件中
}

二、父窗口给子窗口传值(上面的内容可继续延用)
1、子窗口ChildDlg.h文件
//定义一个数据类的指针对象
            CData* m_Data;               

2、父窗口的类中定义一个子窗口的类对象
//ParentDlg.h文件
CChildDlg  m_ChildDlg;
3、父窗口对话框资源中添加一个按钮IDC_BTN_PopChild,建立好后双击该按钮
//ParentDlg.cpp文件
void 父窗口类名::OnBnClickedBtnPopChild(){   //双击后自动生成
              //数据类 赋值给 子对象中的数据类对象(意味着子类中拥有数据类中的数据成员或数据)
               m_ChildDlg.m_Data = m_Data;
           //弹出子窗口
              m_ChildDlg.DoModal();
}
4、子窗口类中ChildDlg.h定义一个Data.h类的指针对象
         CData* m_Data;       
5、子窗口对话框资源中建立一个Eidt控件,给这个Edit控件添加Edit控件类型的变量,变量名m_EditCtrl_Child
在添加一个按钮IDC_BTN_Child,建立好后双击该按钮
//ChildDlg.cpp文件
void 子窗口类名::OnBnClickedBtnChild(){   //双击后自动生成
         m_EditCtrl_Child.SetWindowText(m_Data->m_str);   //把数据类中的值显示在子窗口对话框Edit控件中            
}

三、子窗口给父窗口传值(上面的内容可继续延用)
1、建立自定义消息头文件define.h(建议建立一个,自定义消息多时便于集中管理)
#ifndef _DEFEINE_H_H_H
#define  _DEFEINE_H_H_H

#define WM_REFRESH_MSG WM_USER+0x10

#endif
2、父窗口ParentDlg.cpp中在实现方法的函数中添加获取父窗口句柄语句
void 父窗口类名::OnBnClickedBtnPopChild(){   
              //数据类 赋值给 子对象中的数据类对象(意味着子类中拥有数据类中的数据成员或数据)
               m_ChildDlg.m_Data = m_Data;
             //获取父窗口句柄
               m_ChildDlg.m_hParentWnd = this->GetSafeHwnd();
           //弹出子窗口
              m_ChildDlg.DoModal();
}
3、子窗口ChildDlg.h文件中定义一个句柄
HWND m_hParentWnd;                //定义父窗口句柄(ParentDlg)
4、子窗口ChildDlg.cpp文件
void 子窗口类名::OnBnClickedBtnChild(){   //双击后自动生成
         m_Data->m_str = _T("Test测试");   //把数据类中的值显示在子窗口对话框Edit控件中        
        //发消息给父窗口(ParentDlg),WM_REFRESH_MSG为自定义消息
                ::PostMessage(m_hParentWnd, WM_REFRESH_MSG,0,0);
}
5、父窗口ParentDlg.cpp的BOOL 父窗口类名::OnInitDialog() 消息 中需要添加更新值的函数
BOOL  父窗口类名::OnInitDialog(){
        CDialogEx::OnInitDialog();

        // TODO:  在此添加额外的初始化
        void ParentDlg();

        return TRUE;  // return TRUE unless you set the focus to a control
        // 异常:  OCX 属性页应返回 FALSE
}

哪里有误还请指正

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//