Диалог и его элементы управления не создаются до тех пор, пока вы не вызовете DoModal () и, как уже указывалось, будут уничтожены уже к моменту возврата DoModal (). Из-за этого вы не можете вызывать GetDlgItem () ни до, ни после DoModal (). Решением для передачи или извлечения данных в элемент управления является использование переменной в классе. Вы можете установить его при создании экземпляра класса перед вызовом 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();