从模态MFC表单中输入信息

时间:2014-04-02 13:45:18

标签: c++ visual-c++ visual-studio-2012 mfc

我创建了CPreparationDlg的表单Edit Control。然后我创建了创建模态表单的应用程序,然后按下OK我需要将Edit Control中输入的文本读入主程序的变量。最好的方法是什么?

class CPreparationApp : public CWinApp
{
public:
        BOOL InitInstance();
};


class CPreparationDlg : public  CDialog
{
public:
    enum { IDD = IDD_PREPARATION_DLG };

    CPreparationDlg();
    ~CPreparationDlg();
};


CPreparationDlg::CPreparationDlg()
   : CDialog(CPreparationDlg::IDD)
{
}

CPreparationDlg::~CPreparationDlg()
{
}



BOOL CPreparationApp::InitInstance()
{
    //CPreparationDlg Dlg;
    m_pMainWnd = &Dlg;
    Dlg.DoModal();
  // there I would like to read text info




    return TRUE;


}

CPreparationApp theApp;

1 个答案:

答案 0 :(得分:0)

您要问的问题的答案:

您无法从对话框类外部的对话框中的“编辑”控件进行读取或写入。在调用DoModal之前或从DoModal返回之后,与MFC控件关联的窗口不存在。

对话框类必须具有简单类型的成员变量,例如int,double,string。

您可以在构造函数中或在调用DoModal之前设置这些变量。

在OnOK处理程序的对话框类中,您将值从控件移动到成员变量。

DoModal返回后,您可以从成员变量中检索值。

您还需要检查DoModal的返回值,因为您需要知道用户是否退出Ok或Cancel以了解返回的值是否有效。

这些是MFC对话框的基本原则。

至于您不问的问题,发布的代码仍然不正确。注释掉的声明// CPreparationDlg Dlg;表示变量Dlg未定义。设置m_pMainWnd,然后在InitInstance中调用DoModal似乎也不是MFC应用程序的标准用法。

你需要做更多的研究,以了解这一切是如何运作的。