关于mfc对话框之间消息传递的问题

怎么编写可以把模态对话框中选择的组合框内容传递到主对话框的编辑框中

1.在主对话框类头文件中定义一个公共的成员变量,用于存储从模态对话框中传递过来的数据。例如:

public:
    CString m_strDataFromModalDialog;


2.在模态对话框类头文件中定义一个指向主对话框的指针变量,以便在模态对话框中能够访问主对话框的成员变量。例如:

private:
    CMyDialog* m_pParent;


3.在模态对话框类的构造函数中,将指向主对话框的指针变量初始化为父窗口的指针。例如:

CMyModalDialog(CWnd* pParent /*=nullptr*/)
    : CDialog(IDD_MODAL_DIALOG, pParent)
{
    m_pParent = (CMyDialog*)pParent;
}


4.在模态对话框中,当用户在组合框中选择了某个选项后,将数据存储到主对话框的成员变量中。例如:

void CMyModalDialog::OnCbnSelchangeCombo()
{
    CString strData;
    m_combo.GetWindowText(strData);
    m_pParent->m_strDataFromModalDialog = strData;
}


5.最后,在主对话框的代码中,在需要使用从模态对话框传递过来的数据的地方,直接访问成员变量即可。例如:

void CMyDialog::OnButtonShowData()
{
    UpdateData(FALSE); // 先将对话框上的数据刷新一下
    SetDlgItemText(IDC_EDIT_DATA, m_strDataFromModalDialog);
}


在这个例子中,假设主对话框上的编辑框控件被命名为IDC_EDIT_DATA。

以上就是在MFC中实现将模态对话框中选择的组合框内容传递到主对话框的编辑框中的方法。

  • 请看👉 :MFC 访问其他对话框类的变量
  • 除此之外, 这篇博客: MFC 访问其他对话框类的变量中的 访问其他对话框的变量 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 在没有生成实例的情况下就要用静态指针去访问
    首先在要访问的A对话框头文件CADlg.h中定义静态指针

    static CADlg* sADlg;
    

    然后在A对话框类CADlg.cpp中将其初始化

    CADlg*CADlg::sADlg = NULL;
    

    在函数外声明

    然后在CADlg.cpp的构造函数CADlg()处为其赋值

    sADlg = this;
    

    然后如果想在B对话框里访问的话
    就需要在B处定义一个指向sADlg的指针

    CADlg* pAD = CADlg::sADlg;
    

    然后用这个pAD去访问


    但是注意,如果B对话框先出现A对话框后出现的话,这个pAD就是空指针,无法访问。
    这时候就要这样:首先把弹出A对话框设置为非模式对话框
    这个clockView是我的单文档菜单,Onset_alarm_clock是事件,这个换成自己的弹出对话框的事件。

    void CMFCclockView::Onset_alarm_clock()
    {
    	// TODO: 在此添加命令处理程序代码
    	CADlg* pDlg = new CADlg;
    	pDlg->Create(IDD_DIALOG1, this);
    	pDlg->ShowWindow(SW_SHOW);
    }
    

    然后在这个函数中把pAD指针添加进去赋值,然后函数变成这样

    void CMFCclockView::Onset_alarm_clock()
    {
    	// TODO: 在此添加命令处理程序代码
    	CADlg* pDlg = new CADlg;
    	pDlg->Create(IDD_DIALOG1, this);
    	pDlg->ShowWindow(SW_SHOW);
    
    	pAD = CADlg::sADlg;
    }
    

    这样pAD就指向了sADlg,获得了地址,就可以访问A对话框的元素了。


给主对框发消息