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