Шаг 37.
Библиотека OWL.
Программа "Печать вкладышей". Обработка данных диалога

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

    Диалоговое окно программы "Печать вкладышей" содержит 18 областей ввода, каждая из которых может содержать информацию, необходимую вам для печати вкладыша для кассеты. Прежде, чем вы сможете напечатать этикетку кассеты, вы должны получить доступ к этим данным. В традиционных программах для Windows обработка данных диалога требует проверки каждого управляющего элемента до закрытия диалогового окна. Данные из управляющих элементов должны быть сохранены в буфере или обработаны до закрытия диалогового окна. При закрытии диалогового окна эти данные исчезают.

    Однако, как вы уже знаете, ObjectWindows обеспечивает механизм передачи, который автоматически копирует эти данные в буфер, прежде, чем диалоговое окно будет закрыто.

    Чтобы задействовать механизм передачи библиотеки OWL, вы должны сначала определить буфер обмена. Этот буфер обмена - структура, содержащая поле для каждого управляющего элемента, который вы захотите включить в процесс обмена. Типы полей в этой структуре изменяются в зависимости от типа управляющих элементов. Например, для управляющего элемента ввода требуется символьный массив, в то время как кнопка режимов требует только единственное целочисленное число для сохранения своего состояния (выбрана или невыбрана).

    Тип данных буфера обмена для программы "Печать вкладышей" определяется в файле TWCWND.H и выглядит следующим образом:

struct TTransRec
{
   char cassTitle[38] ,  // Название кассеты.
   sideTitle[38] ;       // Название для стороны А или В.
   // Названия песен.
   char edit1[38],  edit2[38],  edit3[38],  edit4[38], 
        edit5[38],  edit6[38],  edit7[38],  edit8[38], 
        edit9[38], edit10[38], edit11[38], edit12[38], 
       edit13[38], edit14[38], edit15[38], edit16[38];
};

    Диалоговое окно имеет два поля названий и 16 полей названий песен. Как видите, каждое вводимое поле имеет символьный массив, состоящий из 38 символов. Вам не нужно обеспечивать в этой структуре поля для кнопок окна диалога, так как кнопки не содержат информации, необходимой вам после закрытия окна диалога.

    Следующим шагом в установке механизма обмена является связь управляющих элементов вашего диалогового окна с управляющими элементами библиотеки OWL, так как только управляющие элементы библиотеки OWL могут участвовать в обмене. Более того, необходимо создавать эти управляющие элементы OWL в том же порядке, в каком они представлены в вашем буфере обмена. Наконец, вы должны передать OWL адрес буфера обмена.

    Все это происходит в конструкторе диалогового окна:

TWCWnd::TWCWnd(TWindow *parent, TResId resId):
        TDialog (parent, resId) 
{
  // Создать OWL-объекты областей ввода. 
  for (int  x = 101; x <= 119; ++x)
            new TEdit(this , x, 38);
  // Установить значения всех буферов в NULL. 
  memset(&dlgStrgs, 0, sizeof dlgStrgs); 
  memset(&sideAStrgs, 0, sizeof sideAStrgs); 
  memset(&sideBStrgs, 0, sizeof sideBStrgs);
  // Установить адрес буфера обмена для диалогового окна. 
  TransferBuffer = &dlgStrgs;
  // Создать OWL-объекты для статических строк. 
  sideStr = new TStatic(this, ID_TITLESTRING, 7); 
  sideButn = new TButton(this, ID_SIDE);
  // Начать со стороны A. 
  sideA = TRUE;
  // Создать оконный объект принтера. 
  printer = new TPrinter;
}

    Здесь программа сначала создает 18 управляющих элементов библиотеки OWL. Первый из них хранит данные в первом поле буфера обмена, второй - во втором поле и т. д. После создания управляющих элементов программа вызывает memset(), чтобы задать всем буферам значения NULL. В случае dlgStrgs, которая представляет собой действительный буфер обмена, определенной как глобальная переменная в начале TWCWND.CPP, результатом этого вызова является то, что все поля в окне диалога при первом его появлении будут не заполнены.

    После очистки буферов программа передает библиотеке OWL адрес буфера обмена, устанавливая поле TransferBuffer диалогового окна. В этот момент механизм передачи полностью инициализирован и готов к работе. Далее конструктор окна создает объект TStatic, связывая его с управляющим элементом статическим текстом ID_TITLESTRING диалогового окна, и объект TButton, связанный с управляющим элементом кнопкой ID_SIDE диалогового окна. Наконец, программа устанавливает флаг sideA в TRUE и создает оконный объект TPrinter, сохраняя его адрес в printer.

    Теперь, когда пользователь первый раз запускает программу, диалоговое окно заботится само о себе. Пользователь может печатать и редактировать данные в любом из полей ввода без помощи со стороны программы.

    "Печать вкладышей" начинает работать, когда пользователь выбирает одну из кнопок (только не Cancel, которая не выполняет никаких действий, кроме закрытия окна диалога).

    На следующем шаге мы рассмотрим более подробно окно диалога.




Предыдущий шаг Содержание Следующий шаг