Только начал изучать Visual C++ и сразу столкнулся с такой проблемой:
Нужно было в диалоге из поля Edit положить значение этого поля в переменную и вывести в MessgeBox (так сказать учебный пример).
С помощью "Add Member Variable Wizard" создал переменную m_strMessageText (тип CString), далее попытался вывести значение этого самого Edit
void CHelloDialogDlg::OnBnClickedOk()
{
UpdateData(true);
AfxMessageBox(m_strMessageText);
}
Проблема была в том, что сообщение было пустое. При дальнейшем изучении выяснил, что мастер не добавил нужный код:
void CHelloDialogDlg::DoDataExchange(CDataExchange* pDX)
{
DDX_Text(pDX, IDC_EDIT1, m_strMessageText); // Вот эту строку пришлось добавлять руками,
// хотя как я понимаю, она должна создаваться автоматически
CDialog::DoDataExchange(pDX);
}
т.е. получилось, что UpdateData ничего не делала, так как не было вызова функции DDX_Text.
Может есть способ заставить VS делать это автоматически или у меня версия какая-то дефективная?
30.09.04 11:50: Перенесено модератором из 'C/C++' — Odi$$ey
Здравствуйте, Dimastiy, Вы писали:
D>Может есть способ заставить VS делать это автоматически или у меня версия какая-то дефективная?
наверно дефективная, т.к. у меня мастер эту строку добавил
Здравствуйте, Dimastiy, Вы писали:
D>Только начал изучать Visual C++ и сразу столкнулся с такой проблемой:
D>Нужно было в диалоге из поля Edit положить значение этого поля в переменную и вывести в MessgeBox (так сказать учебный пример).
D>С помощью "Add Member Variable Wizard" создал переменную m_strMessageText (тип CString), далее попытался вывести значение этого самого Edit
D>D>void CHelloDialogDlg::OnBnClickedOk()
D>{
D> UpdateData(true);
D> AfxMessageBox(m_strMessageText);
D>}
D>
D>Проблема была в том, что сообщение было пустое. При дальнейшем изучении выяснил, что мастер не добавил нужный код:
D>D>void CHelloDialogDlg::DoDataExchange(CDataExchange* pDX)
D>{
D> DDX_Text(pDX, IDC_EDIT1, m_strMessageText); // Вот эту строку пришлось добавлять руками,
D> // хотя как я понимаю, она должна создаваться автоматически
D> CDialog::DoDataExchange(pDX);
D>}
D>
D>т.е. получилось, что UpdateData ничего не делала, так как не было вызова функции DDX_Text.
D>Может есть способ заставить VS делать это автоматически или у меня версия какая-то дефективная?
Возможно ты вызвал комаду добавления поля данных для класса через ClassView, а чтобы добавить поле, которое будет обмениваться данными с элементом управления в диалоге, необходимо добавлять через редактор ресурсов. Для этого в нужном элементе управления (например текстовом поле) в контекстном меню выбрать команду "Add Variable...". Так делается в Visual C++ 7. В VC6.0 с помощью ClassWizard.