visual-c++ - 关闭后从模态 MFC 对话框中获取编辑框文本

标签 visual-c++ mfc modal-dialog

从模态 MFC 对话框中,我想在对话框关闭后从编辑框中提取文本。我试过这个:

CPreparationDlg Dlg;
CString m_str;

m_pMainWnd = &Dlg;
Dlg.DoModal();
CWnd *pMyDialog=AfxGetMainWnd();
CWnd *pWnd=pMyDialog->GetDlgItem(IDC_EDIT1);
pWnd->SetWindowText("huha max");
return TRUE;

这是行不通的。

最佳答案

在您调用 DoModal() 之前不会创建对话框及其控件,并且正如已经指出的那样,在 DoModal() 返回时已经销毁。因此,您不能在 DoModal() 之前或之后调用 GetDlgItem()。将数据传递或检索到控件的解决方案是在类中使用变量。您可以在创建类实例时,在调用 DoModal() 之前设置它。在 OnInitDialog() 中,您将变量的值放入控件中。然后,当窗口被销毁时,您从控件中获取值并将其放入变量中。然后从调用上下文中读取变量。

像这样(注意我是直接在浏览器中输入的,所以可能会出现错误):

class CMyDialog : CDialog
{
  CString m_value;
public:  
  CString GetValue() const {return m_value;}
  void SetValue(const CString& value) {m_value = value;}

  virtual BOOL OnInitDialog();
  virtual BOOL DestroyWindow( );
}

BOOL CMyDialog::OnInitDialog()
{
  CDialog::OnInitDialog();

  SetDlgItemText(IDC_EDIT1, m_value);

  return TRUE;
}

BOOL CMyDialog::DestroyWindow()
{
  GetDlgItemText(IDC_EDIT1, m_value);

  return CDialog::DestroyWindow();
}

然后你可以像这样使用它:
CMyDialog dlg;

dlg.SetValue("stackoverflow");

dlg.DoModal();

CString response = dlg.GetValue();

关于visual-c++ - 关闭后从模态 MFC 对话框中获取编辑框文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5945537/

相关文章:

c# - 监控最常见的 Web 浏览器 c#/vc++/c

c++ - 从特定文件/类输入代码时是否可以自动中断?

c++ - 从 Form2 显示 Form1

c++ - 如何准备 ActiveX 控件以通过 Web 交付

c++ - 单击按钮时 Visual C++ 打开对话框

c++ - VC++中_com_ptr_t赋值

c++ - 我的 MFC 应用程序中报告了错误的内存泄漏

wpf - 阻止从其他线程启动WPF对话框

mfc - 检测 MFC 中的模态对话框

javascript - 从 jquery 模态确认或模态对话框返回值