Процесс обмена данными и проверки данных диалога

   
На этом шаге мы рассмотрим реализацию процесса обмена данными.

   
Вызов функции DoDataExchange() осуществляется функцией CWnd::UpdateData(), в которой создается
объект CDataExchange, передаваемый в качестве параметра сначала функции DoDataExchange(), а
затем - DDX/DDV-функциям.

   
Единственный параметр функции UpdateData() типа BOOL определяет направление передачи данных.
Функция CDialog::OnInitDialog(), выполняемая при создании диалогового окна, вызывает UpdateData() с
параметром FALSE для передачи в элементы управления значений соответствующих переменных-членов класса диалога.
Когда пользователь щелкает в диалоговом окне ОК, стандартный обработчик CDialog::OnOK()
вызывает UpdateData() с параметром TRUE для выполнения проверки данных и сохранения их
в переменных-членах. Схема этого процесса показана на рисунке 1.


Рис.1. Схема механизма DDX/DDV

   
Вызов функции CWnd::UpdateData() реализует обмен данными и их проверку в любом месте программы.
В качестве примера рассмотрим приложение для просмотра изображений, в котором допускается изменять разрешение
и цвет изображения, манипулируя элементами управления немодального диалогового окна. Чтобы обновить изображение
сразу же после изменения значений в элементах управления нужно вызвать UpdateData(). Это позволяет
сохранить новые параметры в классе диалога и сделать их доступными для функций перерисовки изображения.

  • Задание начальных значений для элементов управления диалогового окна.
  • Вернитесь к проекту MyApp.
  • На вкладке ClassView раскройте узел класса СМуАррАрр.
  • Дважды щелкните значок OnDataConnect(), чтобы отредактировать эту функцию.
  • Между объявлением объекта CConnectDialog и вызовом функции DoModal() вставьте
    следующие строки:

      aCD.m_nAccess = 1; 
      aCD.m_bConnect = TRUE;
    

    Теперь вся функция выглядит так:

    void CMyAppApp::OnDataConnect() 
    {
        CConnectDialog aCD; 
        aCD.m_nAccess = 1; 
        aCD.m_bConnect = TRUE;
        aCD.DoModal();
    	
    }
    


    Рис.2. Текст функции OnDataConnect()

  • Соберите и запустите приложение МуАрр. В меню Data выберите команду
    Connect и убедитесь в том, что значения, присвоенные переменным-членам объекта диалога, отображаются в элементах управления.
  • Установка значений элементов управления диалогового окна.
  • Вернитесь к функции OnDataConnect().
  • Удалите следующую строку кода:
      aCD.DoModal();
    
  • Вместо нее вставьте следующий код:
      if (aCD.DoModal() == IDOK)
      {
        CString strMessage;
        strMessage.Format("User %s logged in",   aCD.m_strUserID);
        AfxMessageBox(strMessage);
      }
    


    Рис.3. Текст функции OnDataConnect()

       
    Значение IDOK, возвращаемое функцией DoModal(), свидетельствует, что пользователь закрыл окно,
    щелкнув кнопку ОК, а введенные в элементы управления данные обработаны соответствующими
    функциями проверки. Сами данные хранятся в переменных-членах DDX класса диалога. В данном примере
    значение, введенное в поле User ID, содержится в переменной
    CConnectDialog::m_strUserID.

  • Соберите и запустите приложение МуАрр. В меню Data выберите команду Connect и убедитесь,
    что введенное в поле User ID имя пользователя отображается в информационном окне.

   
Текст измененного приложения можно взять здесь (48,9 Кб).

   
На следующем шаге мы рассмотрим нестандартную реализацию DDX/DDV.



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

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