在对话框Visual Studio中创建对话框

时间:2018-11-12 04:19:57

标签: c++ mfc dialog

我正在尝试为用户创建“表单”类型的输入,因此我在Visual Studio中有一个C ++对话框项目。这个项目有很多可以填写的字段。其中一个字段需要更多信息,因此我想为此应用程序创建一个“子对话框”。我弹出了子对话框,但是无法弄清楚如何将信息重新带回到“主”应用程序中。

loan_info newLoan;
LoanDlg dlgAbout(&newLoan);
if (dlgAbout.DoModal() == IDOK)
{
    CString string;
    dlgAbout.GetDlgItemText(IDC_EDIT__LOAN_PRINCIPLE, string);
}

我在'GetDlgItemText'处收到错误-似乎我目前无法在对话框中获取元素(因为dlgAbout现在为NULL)。 任何在“对话框” Visual Studio项目中创建和访问对话框的指针将不胜感激。 谢谢。

1 个答案:

答案 0 :(得分:0)

MFC在某种程度上是本机Windows资源的C ++资源包装器。通常,C ++对象的生存期与包装资源的生存期一致。一个明显的例外是CDialog派生的类,其中实例的寿命超过了本机窗口资源。

在这种情况下,一旦DoModal返回,就无法访​​问本机窗口层次结构。这就是GetDlgItemText试图做的。它可能会在Debug版本中显示一个失败的debug断言对话框,以通知您有关此信息。

要解决此问题,必须将对话框的数据保留足够长的时间,以便在原生窗口被破坏后可以访问它。常见的解决方案是将数据作为公共类成员存储在对话框包装器类中。然后,您可以在用户输入数据时手动更新类成员,也可以使用MFC的内置支持将类成员绑定到控件。建议使用后者。有关详细信息,请参见MSDN:Dialog Data Exchange and Validation