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

sky-heaven 阅读:140 2025-06-02 22:19:02 评论:0

从模态 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(); 


标签:C++
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

关注我们

一个IT知识分享的公众号