在模态 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();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)