我创建了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;
答案 0 :(得分:0)
您要问的问题的答案:
您无法从对话框类外部的对话框中的“编辑”控件进行读取或写入。在调用DoModal之前或从DoModal返回之后,与MFC控件关联的窗口不存在。
对话框类必须具有简单类型的成员变量,例如int,double,string。
您可以在构造函数中或在调用DoModal之前设置这些变量。
在OnOK处理程序的对话框类中,您将值从控件移动到成员变量。
DoModal返回后,您可以从成员变量中检索值。
您还需要检查DoModal的返回值,因为您需要知道用户是否退出Ok或Cancel以了解返回的值是否有效。
这些是MFC对话框的基本原则。
至于您不问的问题,发布的代码仍然不正确。注释掉的声明// CPreparationDlg Dlg;表示变量Dlg未定义。设置m_pMainWnd,然后在InitInstance中调用DoModal似乎也不是MFC应用程序的标准用法。
你需要做更多的研究,以了解这一切是如何运作的。