http://tikitak.narod.ru ---- Главная страница сайта
Шаг 37 - Пользовательская функция DDX
Создание проекта
Для работы с этой темой Вас понадобится проект созданный шагами 33-34. В него внесем изменения.
Создаем код
Эту функцию можно вставить сразу после #include
void AFXAPI DDX_MyText(CDataExchange* pDx,int ID,CString& Date )
{
if (pDx->m_bSaveAndValidate)
{
DDX_Text(pDx,ID,Date);
Date= Date+" Save DDX";
}
else
{
Date=Date+ " Read DDX";
DDX_Text(pDx,ID,Date);
}
}
Изменения в функции обмена
void CTestDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_MyText(pDX, IDC_EDIT1, m_edit);
}
Описание
Итак мы с Вами создали свою функцию обмена. Зачем это нужно? Пригодится точно. Нопример для перевода строки в число и назад, перевода строки или добавления изменения. Вообщем как фантазия сработает.
Мы обьявили функция как AFXAPI - это модификатор, который устанавливает вызолв функции в соответствии с требованиями MFC. Обьявить её можно в отдельном файле, и тем самым локализовать модификации типов в отдельном файле.
В функцию мы передаем несколько параметров. Первое это обьект, который поддерживает обмен данными. Дальше идентификатор элемента управления и тип передаваемых данных.
CDataExchange знает направление, в котором идет обмен, своё понимание текущей ситуации он хранит в переменной pDx->m_bSaveAndValidate, которую мы и анализируем.
При сохранении мы вызываем функцию DDX_Text дял получения данных и потом модифицируем, а при чтении наоборот - сначала изменяем, а потом вызываем DDX_Text.
Нам осталось только описать её в функции CTestDlg::DoDataExchange, что мы и сделали.
Запускайте. При запуске у Вас в окне должно быть Hello DDX Read DDX, замените его на HI и получите по нажатию на кнопку Ok - Hi Save DDX. У нас получилось, и это очень приятно.
Шпаргалка
Создайте свою функцию DDX
void AFXAPI DDX_MyText(CDataExchange* pDx,int ID,CString& Date )
{
if (pDx->m_bSaveAndValidate)
{
........
}
else
{
.........
}
}
Вызывайте её для обмена
void CTestDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_MyText(pDX, IDC_EDIT1, m_edit);
}
Предыдущий Шаг | Следующий Шаг | Оглавление By Artem.
Используются технологии uCoz
|