我有一个带有编辑文本控件的小对话框:
#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;
}
我无法找到为什么我无法将对话框Text Control中输入的文本转换为txt和strLine0变量。
我发现如果我从CDialogEx制作MyDlg3(而不是像现在这样来自CDialog) - 一切都很顺利。哪里有问题?
答案 0 :(得分:0)
CDialog::OnOK()
中MyDlg3::OnBnClickedOk()
的调用会设置成员变量m_edit
,因此您可以编写类似
MyDlg3 Dlg3;
Dlg3.DoModal();
CString strLine0 = Dlg3.m_edit;
同时确保将m_edit
声明为公开。
答案 1 :(得分:0)
文本在控件和DoDataExchange
中的成员变量之间传输。如您在UpdateData
的文档中所看到的那样DoDataExchange
时会调用CDialog::OnOK
。通过在此之前复制该值,您将无法获得任何结果。您可以通过在调用OnOK
之后移动副本来解决此问题,或者您可以按照另一个答案的建议完全跳过该副本并直接使用成员变量。
答案 2 :(得分:0)
试试这个:
BOOL CPreparationApp::InitInstance()
{
MyDlg3 Dlg3;
if(Dlg3.DoModal()==IDOK);
{
CString strLine0=Dlg3.txt;
return true;
}
return false;
}