Обмен данными диалоговых окон
Если вы используете механизм DDX, задайте начальные значения переменных члена объекта диалогового окна, как правило, в OnInitDialog
обработчике или конструкторе диалогов. Непосредственно перед отображением диалогового окна механизм DDX платформы передает значения переменных-членов в элементы управления в диалоговом окне, где они отображаются, когда диалоговое окно отображается в ответ на DoModal
или Create
. Реализация по умолчанию вызывает UpdateData
функцию-член OnInitDialog
CDialog
класса CWnd
для инициализации элементов управления в диалоговом окне.
Тот же механизм передает значения из элементов в переменные-члены, когда пользователь нажимает кнопку "ОК" (или всякий раз, когда вызывается UpdateData
функция-член с аргументом TRUE). Механизм проверки данных диалогового окна проверяет все элементы данных, для которых указаны правила проверки.
На следующем рисунке показан обмен данными диалогового окна.
Обмен данными диалоговых окон
UpdateData
работает в обоих направлениях, как указано в параметре BOOL , переданном в него. Чтобы выполнить обмен, UpdateData
настройте CDataExchange
объект и вызывает переопределение класса диалогового CDialog
DoDataExchange
окна функции-члена. DoDataExchange
принимает аргумент типа CDataExchange
. Объект CDataExchange
, передаваемый для UpdateData
представления контекста обмена, определяющий такие сведения, как направление обмена.
При переопределении DoDataExchange
(или мастера кода) необходимо указать вызов одной функции DDX для каждого элемента данных (элемента управления). Каждая функция DDX знает, как обмениваться данными в обоих направлениях в зависимости от контекста, предоставленного CDataExchange
аргументом, переданным UpdateData
вашемуDoDataExchange
.
MFC предоставляет множество функций DDX для различных видов обмена. В следующем примере показано DoDataExchange
переопределение, в котором вызываются две функции DDX и одна функция DDV:
void CTestDialog::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Check(pDX, IDC_MY_CHECKBOX, m_bVal);
DDX_Text(pDX, IDC_MY_TEXTBOX, m_strName);
DDV_MaxChars(pDX, m_strName, 20);
}
DDV_
И DDX_
строки — это карта данных. Примеры функций DDX и DDV отображаются для элемента управления проверка поля и элемента управления edit-box соответственно.
Если пользователь отменяет модальное диалоговое окно, OnCancel
функция-член завершает диалоговое окно и DoModal
возвращает значение IDCANCEL. В этом случае данные между диалоговым окном и объектом диалогового окна не обмениваются.
См. также
Обмен данными диалоговых окон и их проверка
Работа с диалоговым окнами в MFC
Проверка данных диалогового окна