如何使用SendMessage将值从子对话框(无模式)传递到父对话框?

时间:2011-08-25 10:47:03

标签: mfc

假设我从父窗口打开一个弹出窗口我在子窗口中计算了一些计算,同时从子窗口提交值我需要在弹出窗口中单击一个按钮时显示子窗口到父窗口文本框的计算值

2 个答案:

答案 0 :(得分:2)

选项1:

您可以将父窗口句柄传递给构造函数中的子窗口,并使用它来调用SendMessage。但是,由于发送消息是阻止呼叫,您可以考虑使用Post Message。

选项2:

void CModeLess::OnOK() 
{
      //Get the value from the control
       m_ctrlEdit.GetWindowText(strVal);
       m_Parent->SetName(strVal);
       DestroyWindow(); 
}

在构建子对话框时传递父对话框指针。并用它来调用你的会员功能。

警告:

当您关闭子窗口时,您应该确保删除子窗口指针的内存,因为您已经提到该对话框是无模式的。您需要通知父对话框子窗口已消失,您需要使用postmessage。

void CModeLess::PostNcDestroy() 
{   
    CDialog::PostNcDestroy();
    GetParent()->PostMessage(WM_MODELESS_CLOSED,0,0);
    delete this;
}

答案 1 :(得分:0)

您的子窗口与班级相关联。

向子窗口的类添加一个方法,该方法将返回计算出的值。即ChildwindowClass :: GetCalculatedValue()

然后您的父窗口可以使用该方法获取值。

我假设您正在使用CDialog :: DoModal来显示子窗口。由于DoModal是一个阻塞函数,因此很容易知道子窗口何时完成。

使用PostMessage通知父对话框子对话框已完成计算,并且可以使用GetCalculatedValue。或者您可以将计算值传递给PostMessage中的父级。

如果计算需要很长时间,请使用工作线程执行此操作并PostMessage结果,否则您将冻结UI。