窗口之间传递数据"/>
MFC不同窗口之间传递数据
一、全局变量法
1)先生成模态对话框。
主窗口
子窗口
2)在主窗口的按钮控件写如下代码
CString global_msg;
void Cexample1Dlg::OnBnClickedButtonMain()
{// TODO: 在此添加控件通知处理程序代码//把IDC_EDIT_MAIN的值给global_msgGetDlgItemText(IDC_EDIT_MAIN, global_msg);Dlg_new dlg;dlg.DoModal();//把global_msg的值给IDC_EDIT_MAINSetDlgItemText(IDC_EDIT_MAIN,global_msg);
}
3)在子窗口的头文件中写如下代码
extern CString global_msg;
4)在子窗口的按钮中写如下代码
void Dlg_new::OnBnClickedButtonNew()
{// TODO: 在此添加控件通知处理程序代码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);
}
更多推荐
MFC不同窗口之间传递数据
发布评论