Visual c++ Can';t获取表单CDialog MFC对话框表单中成员变量的文本信息

Visual c++ Can';t获取表单CDialog MFC对话框表单中成员变量的文本信息,visual-c++,mfc,Visual C++,Mfc,我有一个带有编辑文本控件的小对话框窗体: #include "stdafx.h" #include "MyDlg3.h" #include "afxdialogex.h" // MyDlg3 dialog IMPLEMENT_DYNAMIC(MyDlg3, CDialog) MyDlg3::MyDlg3(CWnd* pParent /*=NULL*/) : CDialog(MyDlg3::IDD, pParent) , m_edit(_T("")) { } MyDlg

我有一个带有编辑文本控件的小对话框窗体:

#include "stdafx.h"
#include "MyDlg3.h"
#include "afxdialogex.h"


// MyDlg3 dialog

IMPLEMENT_DYNAMIC(MyDlg3, CDialog)

MyDlg3::MyDlg3(CWnd* pParent /*=NULL*/)
    : CDialog(MyDlg3::IDD, pParent)
    , m_edit(_T(""))
{

}

MyDlg3::~MyDlg3()
{
}

void MyDlg3::DoDataExchange(CDataExchange* pDX)
{
    CDialog::DoDataExchange(pDX);
    DDX_Text(pDX, IDC_EDIT1, m_edit);
}


BEGIN_MESSAGE_MAP(MyDlg3, CDialog)
    ON_BN_CLICKED(IDOK, &MyDlg3::OnBnClickedOk)
END_MESSAGE_MAP()


// MyDlg3 message handlers


void MyDlg3::OnBnClickedOk()
{
    txt=m_edit;
    // TODO: Add your control notification handler code here
    CDialog::OnOK();
}
我有一个调用此对话框的简单应用程序:

BOOL CPreparationApp::InitInstance()
{
    MyDlg3 Dlg3;
    Dlg3.DoModal();
    CString strLine0=Dlg3.txt;
     return true;
}
我找不到为什么不能将对话框文本控件中输入的文本转换为txt和strLine0变量


我发现,如果我使用CDialogEx制作MyDlg3(而不是像现在这样使用CDialog),一切都会很顺利。问题在哪里?

MyDlg3::OnBnClickedOk()
中调用
CDialog::OnOK()
设置成员变量
m_edit
,这样您就可以编写如下逻辑

MyDlg3 Dlg3;
Dlg3.DoModal();
CString strLine0 = Dlg3.m_edit;

确保
m_edit
声明为public。

文本在
DoDataExchange
中的控件和成员变量之间传输<代码>DoDataExchange在执行
CDDialog::OnOK
时被调用,您可以在的文档中看到这一点。在此之前复制该值不会得到任何结果。您可以通过在调用OnOK后移动副本来解决此问题,也可以根据另一个答案的建议完全跳过副本,直接使用成员变量。

尝试以下操作:

BOOL CPreparationApp::InitInstance()
{
    MyDlg3 Dlg3;
    if(Dlg3.DoModal()==IDOK);
    {
       CString strLine0=Dlg3.txt;
       return true;
    }
    return false;
}

应该没有问题,CDialogEx继承自CDialog。除非获取数据的某些东西是私人的。我通常更喜欢使用DDX_控件和GetWindowText。在OnBnClickedOk期间,m_编辑仍然是空字符串。我对DDX_控件和GetWindowText有相同的结果。为什么您更喜欢DDX_控制?编写简单的字符串赋值比GetWindowText更容易。我正在检查代码,但我的字符串保持为空,使用DDX_控件和GetWindowText也可以。我更喜欢这种方式,主要是因为我们使用第三方库,设置/获取文本并不是我们在控件上所做的唯一事情;此外,我更希望对正在发生的事情有更多的控制权,但这是我个人的观点。请用你的代码发布一些解释。试着说明是什么导致了错误,以及你是如何解决的。