小子不忘记 发表于 2024-2-24 16:54:05

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]
查看完整版本: MFC不同窗口之间传递数据