从子对话框向父对话框传递变量值

适于初学者

1,,新建 MFC AppWizard(exe),选择基于对话框;

2,基本功能是这样的:

一个对话框


当按下输入数据1按钮时,弹出一个对话框


同理,按下输入按钮2时,也弹出一个对话框


输入的数据分别在数1、数2处显示,按下相加结果按钮,会在结果处显示结果。

3,首先建立“输入数据1”的消息响应函数,

(1)双击输入数据1对话框,建立一个新的类,类名为CDialog1;

(2)消息响应函数为:

void CBBDlg::OnButton1() 
{
// TODO: Add your control notification handler code here
CDialog1 dlg;
dlg.DoModal();
}

(3)并在开头加上头文件:#include "Dialog1.h"

此时可以先运行看看正常否。

4,我的输入数据1后面的编辑框的ID是 ID_EDIT1,增加一个成员变量为 CString类型的m_str1;

5,建立OK的消息响应函数:

void CDialog1::OnOK() 
{
// TODO: Add extra validation here
UpdateData(true);
GetDlgItem(IDC_EDIT1)->GetWindowText(m_str1);
CDialog::OnOK();
}

6,建立静态文本框“数1”的一个成员变量 CString类型的m_strT1;

7,在3(2)中的函数中再添加

m_strT1=dlg.m_str1;
UpdateData(false);

这样的话,第一个就创建成功了,可以运行一下。

照此,创建第二个;

{注意:两个对话框中的ID可以一样,我创建的第二个弹出对话框编辑框的ID也是ID_EDIT1,我就改成了ID_EDIT2(其实不用改),结果在第二种方法时出现了错误,在第二个弹出对话框文件中void CDialog2::DoDataExchange(CDataExchange* pDX)函数中,系统已经创建了DDX_Text(pDX, IDC_EDIT1, m_str2);要注意将它改掉才行。}

8,建立”相加结果“按钮的消息响应函数:

void CBBDlg::OnButton3()
{
// TODO: Add your control notification handler code here
int num1,num2,sum;
num1=atoi(m_strT1);
num2=atoi(m_strT2);
sum=num1+num2;
m_strT3.Format("%d",sum);
UpdateData(false);
}

完成。

PS:运行时发现数1、数2、结果三个静态文本框的内容不见了,原来UpdateData(false);将自动关联的变量放进去了,原来是空内容。所以在主文本框函数里添加

m_strT1 = _T("数1");
m_strT2 = _T("数2");
m_strT3 = _T("结果");

第二种方法:在子对话框文件DoDataExchange函数中添加DDX_Control(pDX, IDC_EDIT1, m_EDIT1);,在头文件中添加CEdit m_EDIT1;,在OK键的消息响应函数中添加

GetDlgItemText(IDC_EDIT1,m_str1);
m_EDIT1.GetWindowText(m_str1);

这些都是在一个对话框的文件中添加的

第三种方法:

在OK键的消息响应函数中添加

CBBDlg * pdlg = (CBBDlg *)GetParent();
pdlg - >m_strT2 = m_str2;

在本对话框文件中要添加有关BBDlg的头文件

前面的按键响应函数就变成这样:

void CBBDlg::OnButton1()
{
// TODO: Add your control notification handler code here
CDialog1 dlg(this);
dlg.DoModal();
// m_strT1=dlg.m_str1;
UpdateData(false);

}

这个方法属于指针类。

  • 0
    点赞
  • 0
    收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页
评论

打赏作者

草长莺飞

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值