Шаг 45.
Среда программирования Visual C++.
Механизмы обмена данными и проверки данных диалога
На этом шаге мы рассмотрим создание переменных, используемых для доступа к элементам окна диалога.
Механизм обмена данными диалога (dialog data exchange, DDX) представляет собой простой
способ инициализации элементов управления диалогового окна и получения вводимых пользователем данных.
Механизм проверки данных диалога (dialog data validation, DDV) обеспечивает простой способ
контроля данных, вводимых в диалоговом окне.
Механизмы DDX и DDV реализованы в классе диалога и используют программную архитектуру,
аналогичную описанной для карты сообщений. Переменные-члены класса диалога сопоставляются с элементами
управления шаблона диалога, а с помощью глобальных MFC-функций выполняется обмен данными между
переменными-членами и элементами управления, а также проверка данных, вводимых пользователем.
При создании класса диалога ClassWizard добавляет в него код реализации базовой архитектуры DDX/DDV. Далее
посредством ClassWizard Вы сможете добавлять в класс диалога переменные, соответствующие элементам
управления шаблона диалога, и определять правила простейшей проверки данных, вводимых в эти элементы.
При добавлении переменных-членов DDX ClassWizard выполняет следующие действия:
- добавляет переменные-члены в определение класса;
- инициализирует переменные-члены в конструкторе класса;
- добавляет в класс DDX-функции обмена данными между DDX-переменными и элементами
управления диалогового окна;
- если для задания критериев проверки используется ClassWizard, то он добавляет в класс DDV-функции
проверки, которая выполняется до сохранения данных в переменных-членах DDX.
Функции DDX и DDV - это глобальные MFC-функции, предназначенные для обмена данными
между элементами управления и переменными-членами класса диалога (DDX-функции) и для контроля вводимых
данных (DDV-функции). В MFC имеется несколько DDX-функций, соответствующих разным
типам элементов управления. Наиболее часто используются следующие функции:
- DDX_Text() - для обмена данными между полем ввода и переменной-членом типа CString и
- DDX_Check() - для установки или передачи состояния флажка в переменную-член типа BOOL.
В MFC также имеется несколько DDV-функций, соответствующих разным способам проверки, применяемым
к строковым или числовым переменным:
- DDV_MaxChars() и
- DDV_MinMaxInt().
Чтобы познакомиться с полным списком этих функций, введите DDX_ или DDV_ в поле Keyword вкладки
Index справочной системы Visual C++.
Обычно переменная-член (а также DDX-функция) создается для каждого элемента управления диалогового окна, предназначенного
для ввода данных или изменения его состояния. Однако контроль за данными осуществляют только в случаях, когда не
допускается выход вводимых значений за границы допустимого диапазона.
В следующих упражнениях средствами ClassWizard мы добавим переменные-члены DDX и определим критерии проверки данных.
- Добавление переменных-членов DDX средствами ClassWizard.
- Вернитесь к проекту МуАрр.
- Нажмите CTRL+W, чтобы открыть ClassWizard. Щелкните вкладку Member Variables.
- В списке Class name выберите класс CConnectDialog.
- В списке Control IDs щелкните IDC_USERID.
- Щелкните Add Variable. Появится диалоговое окно Add Member Variable.
- В поле Member variable name введите m_strUserID.
- Убедитесь, что в списке Category установлено Value, а в поле Variable type - CString.
Рис.1. Добавление переменной m_strUserID
- Щелкните ОК, чтобы добавить переменную. В списке Control IDs Вы увидите выделенную
строку для идентификатора IDC_USERID, в которой показаны тип и имя новой переменной. Эта переменная
будет использоваться для заполнения поля User ID и для хранения текста, введенного пользователем в этом
элементе управления.
- Введите число 15 в поле Maximum Characters, расположенное под списком Control IDs. Будет
создана функция, которая контролирует превышение длины вводимого текста сверх 15 символов.
Рис.2. Задание максимальной длины строки
- Повторите описанные выше действия, чтобы создать переменную m_strPassword типа CString,
связанную с элементом управления IDC_PASSWORD и ограниченную 15 символами.
- Добавьте переменную m_nAccess типа int, связанную с элементом управления IDC_ACCESS.
Обратите внимание, что для переменной целого типа разрешается задать максимальное и минимальное значения.
В поле Minimum Value введите 1, а в поле Maximum Value значение 5.
Рис.3. Задание переменной m_nAccess
- Добавьте переменную m_bConnect типа BOOL, связанную с идентификатором IDC_CHECKCONTROL
и предназначенную для первоначальной установки флажка в положение "установлен" (TRUE) или
"сброшен" (FALSE), а также для хранения состояния, в которое флажок установит пользователь.
- Щелкните ОК, чтобы закрыть ClassWizard. Соберите и запустите приложение МуАрр.
- Выберите в меню Data команду Connect и введите имя пользователя и пароль.
Посмотрите, как блокируется ввод имени пользователя, превышающего 15 символов, в соответствии с правилом проверки,
заданным в пункте 9. Реализация ограничения осуществляется функцией DDV_MaxChars(), которая при
инициализации элемента управления посылает ему сообщение ЕМ_LIMITTEXT. Контроль, выполняемый
непосредственно при вводе, удобнее для пользователя по сравнению с проверкой введенного значения,
инициируемого щелчком кнопки ОК (или кнопки Connect в данном случае).
- Чтобы задать обычную проверку, введите 6 в поле Access level и щелкните Connect. Функция
проверки для этого поля предупредит Вас посредством сообщения в информационном окне о недопустимости введенного
значения и вернет фокус ввода в элемент управления, не прошедший проверку. В реальном приложении уровень
доступа следует устанавливать, выбирая нужный элемент из списка с предварительно заданным набором значений -
в этом случае отпадает необходимость в проверке введенного значения.
Рис.4. Результат работы приложения
- Щелкните Cancel, чтобы закрыть диалоговое окно.
Текст измененного приложения можно взять здесь (48,9 Кб).
На следующем шаге мы продолжим знакомство с DDX/DDV.
Предыдущий шаг
Содержание
Следующий шаг