Если переменные задействованные в DDX объявлены в классе диалога как публичные.
class CMyDialog : public CDialog { // Construction public: CMyDialog(CWnd* pParent = NULL); // standard constructor // Dialog Data //{{AFX_DATA(CMyDialog) enum { IDD = IDD_DIALOG1 }; CString m_Ed1; CString m_Ed2; //}}AFX_DATA ..... }
Произвести инициализацию их можно и перед вызовом диалога на экран из функции, которая вызывает диалог. Естественно, что если вы пытаетесь присваивать значения в функции OnInitDialog, то она имеет более высокий приоритет (вызывается позже) и перекроет наши данные. Но мы в OnInitDialog ничего делать не будем. Итак, перед вызовом диалога передаем значения.
void CTest6Doc::OnTestTest() { cm.m_Ed1= "Test"; cm.m_Ed2 = "extern"; cm.DoModal(); }
Запускаем и смотрим:
Точно так же можно воспользоваться этими переменными для получения данных из диалога.
void CTest6Doc::OnTestTest() { cm.m_Ed1= "Test"; cm.m_Ed2 = "extern"; cm.DoModal(); AfxMessageBox(cm.m_Ed1 + " " + cm.m_Ed2); }
Вот результат, если ничего не менять в диалоге: