我已经创建了具有Edit Control
的表单CPreparationDlg
。然后,我已经创建了应用程序来创建模式表单,在按下OK后,我需要将编辑控件中输入的文本读入主程序的变量中。做这件事最好的方法是什么?
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;
发布于 2014-04-02 14:42:35
你问的问题的答案是:
不能从dialog类外部读取或写入对话框上的Edit控件。与MFC控件关联的窗口在调用DoModal之前或从DoModal返回之后不存在。
对话框类必须具有简单类型的成员变量,如int、double、string。
您可以在构造函数中或在调用DoModal之前设置这些变量。
在OnOK处理程序的对话框类中,可以将值从控件移动到成员变量。
在DoModal返回后,您可以从成员变量中检索值。
您还需要检查DoModal的返回值,因为您需要知道用户是否以Ok或Cancel退出,以了解返回值是否有效。
这些是MFC对话框的基本原则。
至于你没有问的问题,发布的代码仍然不正确。注释掉的declaraion //CPreparationDlg Dlg;表示变量Dlg未定义。设置m_pMainWnd,然后在InitInstance中调用DoModal似乎也不是MFC应用程序的标准用法。
你需要做更多的研究来找出这一切是如何工作的。
https://stackoverflow.com/questions/22813459
复制