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

这篇博客介绍了在MFC应用中如何实现父对话框与子对话框之间的值传递。首先,通过创建数据类并在父窗口中显示数据,然后将数据传递给子对话框并显示。同时,详细讲解了如何在子窗口中修改数据并通知父窗口进行更新,涉及自定义消息的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

准备工作:
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
}




哪里有误还请指正
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值