Обмен данными диалоговых окон

Если вы используете механизм DDX, задайте начальные значения переменных члена объекта диалогового окна, как правило, в OnInitDialog обработчике или конструкторе диалогов. Непосредственно перед отображением диалогового окна механизм DDX платформы передает значения переменных-членов в элементы управления в диалоговом окне, где они отображаются, когда диалоговое окно отображается в ответ на DoModal или Create. Реализация по умолчанию вызывает UpdateData функцию-член OnInitDialogCDialog класса CWnd для инициализации элементов управления в диалоговом окне.

Тот же механизм передает значения из элементов в переменные-члены, когда пользователь нажимает кнопку "ОК" (или всякий раз, когда вызывается UpdateData функция-член с аргументом TRUE). Механизм проверки данных диалогового окна проверяет все элементы данных, для которых указаны правила проверки.

На следующем рисунке показан обмен данными диалогового окна.

Diagram of data model and on screen dialog box data exchange.
Обмен данными диалоговых окон

UpdateData работает в обоих направлениях, как указано в параметре BOOL , переданном в него. Чтобы выполнить обмен, UpdateData настройте CDataExchange объект и вызывает переопределение класса диалогового CDialogDoDataExchange окна функции-члена. 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
Проверка данных диалогового окна