MFC中DoDataExchange函数以及在对话框之间传递信息

在进行MFC编程的时候常常看到利用wizard生成的文件中含有DoDataExchange函数,但是从来没有关心过其作用或者原因。
同时,以前也想过两个对话框之间要怎么传递数据与信息,包括在培训的时候也讲述过这个应用的实现方法。

通过查询相关资料和MSDN上面的说明,可以知道,通过在DoDataExchange函数中,绑定变量和空间,能够实现控件内容和变量之间的数据传递。

首先,在弹出的对话框类(CPopDlg)中创建变量;

private:
    CString m_usname;
    CString m_pswd;
public:
    void setUSNM(CString usnm);
    void setPSWD(CString pswd);
    CString getUSNM(void);
    CString getPSWD(void);

其次,在该类的DoDataExchange函数中,绑定控件和变量;

///注意此处在弹出的对话框类中进行绑定,其实也可以在主窗口中绑定,但是可能无法在子窗口中控制
void CLoginDlg::DoDataExchange(CDataExchange* pDX)
{
    CDialogEx::DoDataExchange(pDX);
    //// 可以认为这是一个绑定的过程
    DDX_Text(pDX, IDC_EDIT_USNM, m_usname);
    DDX_Text(pDX, IDC_EDIT_PSWD, m_pswd);
}

然后可以编写对应的set方法和get方法。在主对话框中需要弹出对话框的地方设置变量的值;

////模态对话框和非模态对话框的都可以
void CtestDoDataExchangeDlg::OnBnClickedPop()
{
    pcld = new CLoginDlg();

    pcld->setUSNM("admin");
    pcld->setPSWD("password");

    //pcld->Create(IDD_DlgLogin, this);该函数必须在UpdateData之前调用?

    //pcld->UpdateData(FALSE);
    //pcld->ShowWindow(SW_SHOWNORMAL);
    ///////// 这个地方,在使用domodal的时候,还是比较需要注意的
    ///////// 因为,貌似不能在这里使用updatedata。可能是因为domodal中
    ///////// 集成了updatedata的相关操作吧
    //pcld->UpdateData(FALSE);
    pcld->DoModal();

    // TODO: Add your control notification handler code here
}

上面讲到模态对话框和非模态对话框都可以,但是模态对话框不需要updateData函数,原因暂时未知,可能实在domodal函数中具有此函数。而非模态则比较简单,但是一定要在create函数之后再调用。

调用CPopDlg对象的updateData(FALSE)函数,然后就会发现内容被传递到控件上面了;
这里写图片描述

如果在子对话框CPopDlg中更改了空间上面的内容,还想要把结果传递回来,只需要在离开CPopDlg的时候调用updateData(TRUE)就可以由控件传递到变量上面。

void CLoginDlg::OnBnClickedOk()
{
    UpdateData(TRUE);
    // TODO: Add your control notification handler code here
    CDialogEx::OnOK();
}

这里写图片描述

  • 7
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值