На этом шаге мы рассмотрим реализацию механизма обмена и проверки данных средствами ClassWizard.
Чтобы увидеть код, добавленный ClassWizard для реализации механизма DDX/DDV, откройте файл ConnectDialog.h и найдите описание новых переменных класса:
//{{AFX_DATA(CConnectDialog) enum { IDD = IDD_CONNECTDIALOG }; CString m_strUserID; CString m_strPassword; int m_nAccess; BOOL m_bConnect; //}}AFX_DATA
Как и весь код, обслуживаемый ClassWizard, эти объявления находятся внутри блока //{{AFX_.
Найдите в файле ConnectDialog.cpp конструктор класса и код, добавленный ClassWizard для инициализации переменных по умолчанию:
//{{AFX_DATA_INIT(CConnectDialog) m_strUserID = _T(""); m_strPassword = _T(""); m_nAccess = 0; m_bConnect = FALSE; //}}AFX_DATA_INIT
Обмен данными между элементами управления и приложением осуществляет функция CWnd::DoDataExchange(). Переопределяемая версия этой функции автоматически формируется средствами ClassWizard при создании класса, производного от CDialog. ClassWizard добавляет в нее обращения к DDX/DDV-функциям.
Функция CConnectDialog::DoDataExchange() расположена в файле ConnectDialog.cpp и на данном этапе должна выглядеть следующим образом:
void CConnectDialog::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CConnectDialog) DDX_Text(pDX, IDC_USERID, m_strUserID); DDV_MaxChars(pDX, m_strUserID, 15); DDX_Text(pDX, IDC_PASSWORD, m_strPassword); DDV_MaxChars(pDX, m_strPassword, 15); DDX_Text(pDX, IDC_ACCESS, m_nAccess); DDV_MinMaxInt(pDX, m_nAccess, 1, 5); DDX_Check(pDX, IDC_CHECKCONTROL, m_bConnect); //}}AFX_DATA_MAP }
Параметр pDX, передаваемый DDX/DDV-функциям, представляет собой объект MFC-класса CDataExchange, инкапсулирующий контекст текущего обмена данными. Переменная m_bSaveAndValidate класса CDataExchange задает направление передачи данных. Если ее значение TRUE, то данные извлекаются из элемента управления для проверки и сохранения в переменной класса диалога. В противном случае (FALSE) данные передаются в обратном направлении - в диалоговое окно для изменения элемента управления.
На следующем шаге мы рассмотрим процесс обмена данными и проверки данных диалога.