Проблемы с DDX в VS .NET 2003
От: Dimastiy  
Дата: 30.09.04 07:19
Оценка:
Только начал изучать 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
Re: Проблемы с DDX в VS .NET 2003
От: Odi$$ey Россия http://malgarr.blogspot.com/
Дата: 30.09.04 07:49
Оценка:
Здравствуйте, Dimastiy, Вы писали:

D>Может есть способ заставить VS делать это автоматически или у меня версия какая-то дефективная?


наверно дефективная, т.к. у меня мастер эту строку добавил
Re: Проблемы с DDX в VS .NET 2003
От: misha_sk Россия  
Дата: 30.09.04 16:24
Оценка:
Здравствуйте, 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.
Re[2]: Проблемы с DDX в VS .NET 2003
От: Dimastiy  
Дата: 30.09.04 20:01
Оценка:
Здравствуйте, misha_sk, Вы писали:

_>Возможно ты вызвал комаду добавления поля данных для класса через ClassView, а чтобы добавить поле, которое будет обмениваться данными с элементом управления в диалоге, необходимо добавлять через редактор ресурсов. Для этого в нужном элементе управления (например текстовом поле) в контекстном меню выбрать команду "Add Variable...". Так делается в Visual C++ 7. В VC6.0 с помощью ClassWizard.



Нет, добавлял именно так как Вы сказали, через этот мастер. Я сегодня разбирался пол дня, после выяснил следующее:
В мастере при создании переменной есть такой checkbox Control variable, вот я его не отмечал (так у меня было написано в книге), а на самом деле его нужно было отметить и выбрать Category = Value. С отмеченным checkboxom все заработало как и должно было быть.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.