怎样在MFC的两个对话框中相互传递数据

https://blog.csdn.net/wf6892/article/details/52451910

前提:在一个基于单文档的应用程序中,新建了两个对话框A和B,并且用两个独立的类和他们关联。

        A中有一个编辑框(关联变量为:m_strA),一个按钮a;

        B中有一个编辑框(关联变量为:m_strB),一个确定按钮(ID为:IDOK),一个取消按钮(ID:IDCANCEL);

目的:点击对话框A的按钮a后弹出对话框B,在B的编辑框中输入数字,点击B中确定按钮后,B的编辑框中的数字传递给A的编辑框并显示。

具体实现方法:

在A对话框的Button1按钮响应函数中,添加以下代码:

void DlgA::OnButton1() 
{
  // TODO: Add your control notification handler code here
  INT_PTR nRes;// 用于保存 DoModal 函数的返回值
  DlgB dlgB; // 新建B对话框的对象
  nRes = dlgB.DoModal(); // 弹出对话框B
 
if (IDCANCEL == nRes) // 第一个if:判断对话框退出后返回值是否为 IDCANCEL,如果是则 return,不继续向下直行,即不继续执行两个对话框之间的数据传输以及UpdateData;否则继续向下执行。
   return;  
if (IDOK==nes)
   m_strA=dlgB.m_strB;   // m_strA是a编辑框关联的变量,m_strB是b对话框关联的变量;此句是通过新建对象将B编辑框的值传递给A的编辑框。
    
UpdateData(FALSE); //使控件关联变量中的值在控件中显示
}
在B对话框的“确定”ID号为(IDOK),函数中添加以下代码:

void DlgB::OnOK() 
{
  // TODO: Add extra validation here
 
  UpdateData(TRUE);// 获取b对话框的值,保存在m_strB中
 
  CDialog::OnOK();//系统自动生成
}

说明:

    1.此方法核心思想就是通过在B中新建类A的对象,在类B中即可使用类A的所有参数。

    2.如果不用本文方法,将对话框A中的确定按钮的函数定义在B对话框的类中,即使点击该按钮,其函数也不执行。

    3.关于DoModal函数。它的作用是弹开新的对话框,其返回值为退出对话框时点击的按钮的ID(点击弹出对话框的确定或取消按钮都会退出对话框,只是执行的函数不同)。
 

猜你喜欢

转载自blog.csdn.net/active2489595970/article/details/88525438