Механизмы обмена данными и проверки данных диалога

   
На этом шаге мы рассмотрим создание переменных, используемых для доступа к элементам окна диалога.

   
Механизм обмена данными диалога (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.



Вы можете оставить комментарий, или Трекбэк с вашего сайта.

Оставить комментарий