-
-
父对话框与子对话框间值的传递,弹出子对话框
-
发表于: 2016-10-24 19:20 4136
-
准备工作:
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
}
哪里有误还请指正
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
}
哪里有误还请指正
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!
赞赏
看原图
赞赏
雪币:
留言: