【发布时间】:2014-05-15 09:53:17
【问题描述】:
我有一个带有编辑文本控件的小对话框:
#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 制作)- 一切都很好。问题出在哪里?
【问题讨论】:
-
应该没问题,CDialogEx继承自CDialog。除非涉及获取数据的某些内容是私有的。我通常更喜欢使用 DDX_Control 和 GetWindowText。
-
在 OnBnClickedOk 期间 m_edit 仍然是空字符串。我对 DDX_Control 和 GetWindowText 有相同的结果。为什么你更喜欢 DDX_Control?编写简单的字符串赋值比 GetWindowText 更容易。
-
我正在检查您的代码,但我的字符串保持为空,可以使用 DDX_Control 和 GetWindowText。我更喜欢这种方式主要是因为我们使用 3rd 方库,并且设置/获取文本并不是我们在控件上做的唯一事情;此外,我更喜欢对正在发生的事情有更多的控制权,但这是个人观点。
标签: visual-c++ mfc