В прошлом шаге мы посмотрели, что если класс это элемент управления, то производить внешнюю инициализацию не всегда корректно. Тут выход простой. Завести переменную. Дополнительную.
class CMyDialog : public CDialog { // Construction public: CMyDialog(CWnd* pParent = NULL); // standard constructor // Dialog Data //{{AFX_DATA(CMyDialog) enum { IDD = IDD_DIALOG1 }; CEdit m_Ed1; CString m_Ed2; //}}AFX_DATA CString m_Ed1_str; // Overrides .... };
Инициализировать ее:
void CTest6Doc::OnTestTest() { cm.m_Ed1_str ="Test"; cm.m_Ed2 = "extern"; cm.DoModal(); }
А вот в OnInitDialog() производить инициализацию:
BOOL CMyDialog::OnInitDialog() { CDialog::OnInitDialog(); m_Ed1.SetWindowText(m_Ed1_str); // TODO: Add extra initialization here return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE> }
Но уже после вызова OnInitDialog(), чтобы элементы были созданы. Но на этом неприятности не закончились. Вы не сможете получить данные назад, так как элемент управления будет разрушен.