MFC不同窗口之间传递数据
一、全局变量法
1)先生成模态对话框。
主窗口
子窗口
2)在主窗口的按钮控件写如下代码
CString global_msg;
void Cexample1Dlg::OnBnClickedButtonMain()
{
// TODO: 在此添加控件通知处理程序代码
//把IDC_EDIT_MAIN的值给global_msg
GetDlgItemText(IDC_EDIT_MAIN, global_msg);
Dlg_new dlg;
dlg.DoModal();
//把global_msg的值给IDC_EDIT_MAIN
SetDlgItemText(IDC_EDIT_MAIN,global_msg);
}
3)在子窗口的头文件中写如下代码
extern CString global_msg;
4)在子窗口的按钮中写如下代码
void Dlg_new::OnBnClickedButtonNew()
{
GetDlgItemText(IDC_EDIT_NEW, global_msg);
}
5)重新子窗口初始化代码
BOOL Dlg_new::OnInitDialog()
{
CDialogEx::OnInitDialog();
// TODO:在此添加额外的初始化
SetDlgItemText(IDC_EDIT_NEW, global_msg);
return TRUE;// return TRUE unless you set the focus to a control
// 异常: OCX 属性页应返回 FALSE
}
二、成员变量法
1)在子窗口头文件,公共成员变量里:
public:
CString message;
2)在主窗口按钮程序中
void Cexample1Dlg::OnBnClickedButtonMain()
{
// TODO: 在此添加控件通知处理程序代码
/*成员变量法*/
Dlg_new dlg;
GetDlgItemText(IDC_EDIT_MAIN,dlg.message);
dlg.DoModal();
SetDlgItemText(IDC_EDIT_MAIN,dlg.message);
}
3) 在子窗口按钮程序中
void Dlg_new::OnBnClickedButtonNew()
{
// TODO: 在此添加控件通知处理程序代码
/*成员变量法*/
GetDlgItemText(IDC_EDIT_NEW, message);
}
4)在子窗口初始化程序中
BOOL Dlg_new::OnInitDialog()
{
CDialogEx::OnInitDialog();
/*成员变量法*/
SetDlgItemText(IDC_EDIT_NEW, message);
return TRUE;// return TRUE unless you set the focus to a control
// 异常: OCX 属性页应返回 FALSE
}
三、通过AfxGetMainWnd()获取主窗口的指针
1)主窗口按键程序
void Cexample1Dlg::OnBnClickedButtonMain()
{
// TODO: 在此添加控件通知处理程序代码
Dlg_new dlg;
dlg.DoModal();
}
2)子窗口初始化程序
BOOL Dlg_new::OnInitDialog()
{
CDialogEx::OnInitDialog();
/*法三通过AfxGetMainWnd()获取主窗口的指针*/
CString msg;
//CWnd* pWnd = AfxGetMainWnd();
//CDialog 为CWnd的子类所以可以用下面的代码,代替上面的代码。
//因为MFC的窗口都是基于CDialog,所以用下面的代码
CDialog* pdlg = (CDialog*)AfxGetMainWnd();//获取主窗口的指针
pdlg->GetDlgItemText(IDC_EDIT_MAIN,msg);
SetDlgItemText(IDC_EDIT_NEW,msg);
return TRUE;// return TRUE unless you set the focus to a control
// 异常: OCX 属性页应返回 FALSE
}
3)子窗口按键程序
void Dlg_new::OnBnClickedButtonNew()
{
// TODO: 在此添加控件通知处理程序代码
/*法三通过AfxGetMainWnd()获取主窗口的指针*/
CString msg;
CDialog* pdlg = (CDialog*)AfxGetMainWnd();
GetDlgItemText(IDC_EDIT_NEW, msg);
pdlg->SetDlgItemText(IDC_EDIT_MAIN, msg);
}
四、通过GetParent()获取父窗口的指针
1)主窗口按键程序
void Cexample1Dlg::OnBnClickedButtonMain()
{
// TODO: 在此添加控件通知处理程序代码
Dlg_new dlg;
dlg.DoModal();
}
2)子窗口初始化程序
BOOL Dlg_new::OnInitDialog()
{
CDialogEx::OnInitDialog();
/*法四通过GetParent()获取父窗口的指针*/
CString msg;
//CWnd* pWnd = AfxGetMainWnd();
//CDialog 为CWnd的子类所以可以用下面的代码,代替上面的代码。
//因为MFC的窗口都是基于CDialog,所以用下面的代码
CDialog* pdlg = (CDialog*)GetParent();//获取主窗口的指针
pdlg->GetDlgItemText(IDC_EDIT_MAIN,msg);
SetDlgItemText(IDC_EDIT_NEW,msg);
return TRUE;// return TRUE unless you set the focus to a control
// 异常: OCX 属性页应返回 FALSE
}
3)子窗口按键程序
void Dlg_new::OnBnClickedButtonNew()
{
// TODO: 在此添加控件通知处理程序代码
/*法四通过GetParent()获取父窗口的指针*/
CString msg;
CDialog* pdlg = (CDialog*)GetParent();
GetDlgItemText(IDC_EDIT_NEW, msg);
pdlg->SetDlgItemText(IDC_EDIT_MAIN, msg);
}
页:
[1]