以下是我建的工程:
建一个基于Dialog的MFC程序(所有设置都是默认)
在对话框中加入一个Edit控件给类CMyDlg添加变量m_strEdit 类型为CString与Edit控件关联 在CMyApp::InitInstance()中把m_pMainWnd = &dlg去掉
在if (nResponse == IDOK)后加上语句:
AfxMessageBox(dlg.m_strEdit);
CMyDlg的构造函数中
初始化m_strEdit的值问题出在下面:
Edit中文本初始化可以有三种方法:
1.在CMyDlg构造函数中初始化变量m_strEdit
2.在CMyDlg::OnInitDialog()中,调用CDialog::OnInitDialog前改变m_strEdit的值
3.在CMyDlg::OnInitDialog()中,调用CDialog::OnInitDialog之后改变m_strEdit的值,然后加入语句UpdateData(false)。当我在构造函数中初始化变量m_strEdit的值后(例如 m_strEdit=str1)
为什么在CMyDlg::OnInitDialog()中,调用CDialog::OnInitDialog前改变m_strEdit的值可以使得初始化的值改变,而在调用CDialog::OnInitDialog之后改变m_strEdit的值而不加上语句UpdateData(false),文本框中内容仍是构造函数中初始化的值。即使没有进行DDX,在CDialog::OnInitDialog之后改变m_strEdit的值为str2,点击ok按钮后,AfxMessageBox显示的内容应该是str2,为什么仍然是str1?

解决方案 »

  1.   

    CDialog::OnInitDialog中有UpdateData(FALSE)这个语句
      

  2.   

    不管有没有调用UpdateDate,m_strEdit的值都被改变为str2了,而且点击ok按钮发生在值改变之后,为什么AfxMessageBox内显示的值不是str2?在调用CDialog::OnInitDialog之后改变m_strEdit的值而不加上语句UpdateData(false),这种情况下应该是初始化的文本为str1,而AfxMessageBox的内容为str2吧
      

  3.   

    CDialog窗口已销毁,而没有调用UpdateData(FALSE),临时数据被还原。
      

  4.   

    CDialog窗口被销毁?
    并没有创建 CDialog的窗口阿
      

  5.   

    没有创建CDialog窗口?那你的ok按钮哪儿来的?
      

  6.   

    我说的就是CMyDialog,它不是从CDialog继承过来的吗?