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

При использовании механизма DDX задаются начальные значения переменных члена объекта диалогового окна, обычно в OnInitDialog обработчике или конструкторе диалогового окна.If you use the DDX mechanism, you set the initial values of the dialog object's member variables, typically in your OnInitDialog handler or the dialog constructor. Непосредственно перед отображением диалогового окна механизм DDX платформы передает значения переменных-членов в элементы управления в диалоговом окне, где они появляются, когда диалоговое окно отображается в ответ на DoModal или Create .Immediately before the dialog is displayed, the framework's DDX mechanism transfers the values of the member variables to the controls in the dialog box, where they appear when the dialog box itself appears in response to DoModal or Create. Реализация по умолчанию OnInitDialog в CDialog вызывает UpdateData функцию члена класса CWnd для инициализации элементов управления в диалоговом окне.The default implementation of OnInitDialog in CDialog calls the UpdateData member function of class CWnd to initialize the controls in the dialog box.

Тот же механизм передает значения из элементов управления в переменные-члены, когда пользователь нажимает кнопку ОК (или при каждом вызове UpdateData функции члена с аргументом true).The same mechanism transfers values from the controls to the member variables when the user clicks the OK button (or whenever you call the UpdateData member function with the argument TRUE). Механизм проверки данных диалогового окна проверяет все элементы данных, для которых были указаны правила проверки.The dialog data validation mechanism validates any data items for which you specified validation rules.

На следующем рисунке показан обмен данными в диалоговом окне.The following figure illustrates dialog data exchange.

Обмен данными диалоговых оконDialog box data exchange
Обмен данными диалоговых оконDialog Data Exchange

UpdateData работает в обоих направлениях, как указано параметром bool , передаваемым ему.UpdateData works in both directions, as specified by the BOOL parameter passed to it. Чтобы выполнить обмен, UpdateData настраивает CDataExchange объект и вызывает переопределение класса диалогового окна CDialog функции- DoDataExchange члена.To carry out the exchange, UpdateData sets up a CDataExchange object and calls your dialog class's override of CDialog's DoDataExchange member function. DoDataExchange принимает аргумент типа CDataExchange .DoDataExchange takes an argument of type CDataExchange. CDataExchangeОбъект, передаваемый в UpdateData , представляет контекст обмена, определяющий такие сведения, как направление обмена.The CDataExchange object passed to UpdateData represents the context of the exchange, defining such information as the direction of the exchange.

При переопределении (или с помощью мастера кода) DoDataExchange необходимо указать вызов одной функции DDX на каждый элемент данных (Control).When you (or a Code wizard) override DoDataExchange, you specify a call to one DDX function per data member (control). Каждая функция DDX знает, как обмениваться данными в обоих направлениях на основе контекста, предоставленного CDataExchange аргументом, передаваемым в DoDataExchange UpdateData .Each DDX function knows how to exchange data in both directions based on the context supplied by the CDataExchange argument passed to your DoDataExchange by UpdateData.

MFC предоставляет множество функций DDX для различных видов обмена.MFC provides many DDX functions for different kinds of exchange. В следующем примере показано DoDataExchange Переопределение, в котором вызываются две функции DDX и одна функция DDV:The following example shows a DoDataExchange override in which two DDX functions and one DDV function are called:

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);
}

DDX_Строки и DDV_ являются картой данных.The DDX_ and DDV_ lines are a data map. Приведенные ниже примеры функций DDX и DDV предназначены для элемента управления "флажок" и элемента управления "поле ввода" соответственно.The sample DDX and DDV functions shown are for a check-box control and an edit-box control, respectively.

Если пользователь отменяет модальное диалоговое окно, OnCancel функция-член завершает диалоговое окно и DoModal возвращает значение идканцел.If the user cancels a modal dialog box, the OnCancel member function terminates the dialog box and DoModal returns the value IDCANCEL. В этом случае обмен данными между диалоговым окном и объектом диалогового окна не происходит.In that case, no data is exchanged between the dialog box and the dialog object.

См. также разделSee also

Обмен и проверка данных диалоговых оконDialog Data Exchange and Validation
Работа с диалоговыми окнами в MFCWorking with Dialog Boxes in MFC
Проверка данных диалогового окнаDialog Data Validation